我正在开发使用mongoose与我的mongo数据库进行交互的graphql API,并且正在为某些事情而苦苦挣扎。我有带有subdocuments数组的文档,我需要获取所有包含具有特定字段值的subdocument的文档。问题是我只想在文档中获得此子文档。举个例子更容易解释:
我的文档是这样的:
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 }
}
},
});
这样做是为了获得正确的文档,但是它包含所有项目,而不仅仅是符合条件的项目。我正在寻找解决方案,但没有找到任何解决办法。
感谢您的帮助,希望它已经足够清楚了。
答案 0 :(得分:1)
您将需要使用聚合框架,如下所示:
db.test.aggregate(
{ $match: { "id": 1 }},
{ $unwind: '$items' },
{ $match: { "items.value": 5 }},
{ $project: { "_id": 0 }}
)
返回值:
{ "id" : 1, "items" : { "value" : 5 } }
答案 1 :(得分:0)