如何在mongodb中聚合查询

时间:2013-08-31 02:11:15

标签: mongodb mongoose

我的文档集如下所示:

{
  name : "tester"
  , activity: [
    {
      gear: "glasses"
      where: "outside"    
    }
    , {
      gear: "hat"
      , where: "inside"
    }
    , {
      gear: "glasses"
      , where: "car"
    }
  ]
}

如何查询集合以仅返回包含“gear”值的多个活动的文档:“眼镜”?

谢谢!

3 个答案:

答案 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" } } )