使用猫鼬获取数组中子文档的值的计数

时间:2021-02-12 11:27:12

标签: mongodb mongoose

我收集了带有 ID 和联系人的文档。 Contact 是一个包含子文档的数组。

image of the document

我正在尝试获取 isActive = Y 的联系计数。还需要根据 id 查询集合。整个查询可能类似于

选择 Count(contact.isActive=Y) where _id = '601ad0227b25254647823713'

我第一次使用 mongo 和 mongoose。如果我无法正确解释,请编辑问题。

1 个答案:

答案 0 :(得分:1)

您可以使用这样的聚合管道:

  • 第一个 $match 仅获取具有所需 _id 的文档。
  • 然后 $unwind 获取数组中的不同值。
  • 再次匹配以获取 isActive 值为 Y 的值。
  • 并且 $group 为每个存在的文档添加一个(即计算 isActive= Y 的文档)。计数是存储在字段 total 中。
db.collection.aggregate([
  {
    "$match": {"id": 1}
  },
  {
    "$unwind": "$contact"
  },
  {
    "$match": {"contact.isActive": "Y"}
  },
  {
    "$group": {
      "_id": "$id",
      "total": {"$sum": 1}
    }
  }
])

示例here