首页 文章

MongoDB聚合查询:$ size count item仅当等于某个值时

提问于
浏览
1

我知道如何编写查询,以便我可以使用 $size 计算每个文档的数组中的项目数 .

db.collection.aggregate(
   {project : {"name" : 1, _id:0, sizeOf : {$size : "$People.Age"}}}
)

如何使用 $size 编写查询,但我只想计算字段是否等于某个值(例如 People.Ages.Current_Age : 21 ) . 我'm assuming I' d使用 $eq 吗?

示例代码:

{
    "People" : [
        {
            "Name" : "Jen",
            "Ages" : {
                "Current_Age" : 32,
                "Graduate_Age" : 26,
            }
        },
        {
            "Name" : "Bill",
            "Ages" : {
                "Current_Age" : 30,
                "Graduate_Age" : 22,
            }
        },
        {
            "Name" : "Josh",
            "Ages" : {
                "Current_Age" : 27,
                "Graduate_Age" : 24,
            }
        }
    ]
}

2 回答

  • 0

    您可以使用以下聚合

    db.collection.aggregate([
      { "$project": {
        "name": 1, "_id": 0,
        "sizeOf": {
          "$size": {
            "$filter": {
              "input": "$People",
              "as": "people",
              "cond": { "$eq": ["$$people.Ages.Current_Age", 21] }
            }
          }
        }
      }}
    ])
    
  • 1

    您可以在此处使用过滤器运算符,在获取大小之前过滤数组 .

    db.collection.aggregate(
        {project : {"name" : 1, _id:0, sizeOf : {$size : {
            $filter: {
                input: "$People.Age",
                as: "age",
                cond: { $eq:[$$age, 21] }
            }
        }}}}
    )
    

相关问题