[英]Mongoose, apply `.aggregate()` on array of subdocuments and get the result with other fields of document in least number of queries
[英]Get precise subdocuments in document array mongoose
我正在使用mongoose开发一个graphql API来与我的mongo数据库交互,我正在努力解决一些问题。 我有子文档数组的文档,我需要获取包含具有特定字段值的子文档的所有文档。 问题是我想在文档中只获取此子文档。 用一个例子来解释更容易:
我的文件是这样的:
documents: [
{
id: 1,
items: [
{
value: 5,
},
{
value: 10,
},
]
},
{
id: 2,
items: [
{
value: 7,
},
{
value: 10,
},
]
}]
我希望获得所有具有value == 5
的项目的文档,但只包含以下值:
results : [
{
id: 1,
items: [
{
value: 5,
}
]
}]
我现在要做的是:
documents.find({
items: {
$elemMatch : {
value: { $eq: 5 }
}
},
});
事情是这样做我得到了正确的文件,但它包含所有项目,而不仅仅是符合条件的项目。 我找了一个解决方案,但我没有找到任何可以解决的问题。
谢谢你的帮助,我希望它足够清楚。
您需要使用聚合框架,如下所示:
db.test.aggregate(
{ $match: { "id": 1 }},
{ $unwind: '$items' },
{ $match: { "items.value": 5 }},
{ $project: { "_id": 0 }}
)
返回值:
{ "id" : 1, "items" : { "value" : 5 } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.