我的文档集如下所示:
{
name : "tester"
, activity: [
{
gear: "glasses"
where: "outside"
}
, {
gear: "hat"
, where: "inside"
}
, {
gear: "glasses"
, where: "car"
}
]
}
如何查询集合以仅返回包含“gear”值的多个活动的文档:“眼镜”?
谢谢!
答案 0 :(得分:3)
我认为如果您需要根据条件筛选完整文档,则可以不使用聚合框架:
db.collection.find({
"activity": {$elemMatch: {gear:"glasses"}},
"activity.1" : {$exists: 1}
})
答案 1 :(得分:2)
这对聚合框架来说会很难看,但可以做到:
db.collection.aggregate(
{$match: {"activity.gear": "glasses"}},
{$unwind: "$activity"},
{$group: {
_id: {_id: "$_id", name: "$name"},
_count: {$sum: {$cond: [{$eq: ["glasses", "$activity.gear"]}, 1, 0]}}
}},
{$match: {_count: {$gt: 1}}}
)
在分析上述问题时,我建议逐步完成。从“$ match”,“$ match”和“$ unwind”开始。一个人。您将看到每个步骤的工作原理。
回复不是完整文件。如果您要查找完整文档,请包含通过虚拟活动的$project
步骤,并在输出中重新构建完整文档。
答案 2 :(得分:1)
你也可以试试这个:
db.collection.find( { activity: { $elemMatch: { gear: "glasses" } } )