[英]Return only a subdocument from document in mongoose
我正在开发一个使用 MongoDB(我使用 Mongoose)作为其数据库的应用程序。
我有一个问题,假设我有这种模式:
[{ "user_id":"2328292073" "username":"Bob", "subscriptions":[ { "id":"38271281, "payments":[ { "id":"00001", "amount":"1900" }, { "id":"00002", "amount":"2000" }, { "id":"00003", "amount":"3000" } ] } ] }]
在我的例子中,我想获取 ID 为“2328292073”的用户的 ID =“38271281”的订阅付款数组,但我只想检索付款数组,没有别的
我的查询如下:
Mongoose.findOne({ "user_id": "2328292073", "subscriptions.id": "38271281" }, { "subscriptions.payments": 1 })
但是我得到了整个订阅文档。 我怎样才能只获得付款数组?
如果您只想从数据库中过滤,可以尝试使用 unwind。
Mongoose.aggregate([
{
'$match': {
'user_id': '2328292093'
}
}, {
'$unwind': {
'path': '$subscriptions'
}
}, {
'$match': {
'subscriptions.id': '38271281'
}
}
])
如果您将有多个具有相同订阅 ID 的文档,那么您必须将其分组。
您可以在 find 方法的投影中尝试聚合运算符,也可以使用聚合方法,
$reduce
迭代subscriptions
循环并检查条件是否匹配 id 然后返回支付数组db.collection.find({
"user_id": "2328292073",
"subscriptions.id": "38271281"
},
{
payments: {
$reduce: {
input: "$subscriptions",
initialValue: [],
in: {
$cond: [
{ $eq: ["$$this.id", "38271281"] },
"$$this.payments",
"$$value"
]
}
}
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.