MongoDB获取数组中特定键的计数

Ste*_*hen 1 arrays mongodb mongo-shell

在mongoDB中,我们如何获取数组中特定键的计数

{
 "_id" : ObjectId("52d9212608a224e99676d378"),
 "business" : [
  {
   "name" : "abc",
   "rating" : 4.5
  },
  {
   "name" : "pqr"
  },
  {
   "name" : "xyz",
   "rating" : 3.6
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,business是一个数组(带有"name"和/或"rating"键)

如何才能获得仅存在"评级"密钥的业务数组?

预期产量为:2

vbo*_*vbo 7

看起来你必须使用Aggregation Framework.特别是你需要$展开你的数组,然后只匹配包含rating字段的元素,然后$ group文档回到原始格式.

尝试这样的事情:

db.test.aggregate([
    { $match: { /* your query criteria document */ } },
    { $unwind: "$business" },
    { $match: {
        "business.rating": { $exists: 1 }
      }
    },
    { $group: {
        _id: "$_id",
        business: { $push: "$business" },
        business_count: { $sum: 1 }
      }
    }
])
Run Code Online (Sandbox Code Playgroud)

结果如下所示:

{
  _id: ObjectId("52d9212608a224e99676d378"),
  business: [
    { name: "abc", rating: 4.5 },
    { name: "xyz", rating: 3.6 }
  ],
  business_count: 2
}
Run Code Online (Sandbox Code Playgroud)

UPD看起来OP不想通过包装文档_id字段来分组结果.不幸的是,$group表达式必须指定_id值,否则会失败并出现异常 但是,这个值实际上可以是常量(例如,普通null或者'foobar'),因此只有一个结果组具有集合式聚合.