Запрос агрегата MongoDB: элемент $ size count, только если равен определенному значению - PullRequest
0 голосов
/ 10 декабря 2018

Я знаю, как написать запрос так, чтобы я мог посчитать количество элементов в массиве на документ, используя $size.

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

Как мне написать запрос, используя $size, ноЯ только хочу посчитать поле, если оно равно определенному значению (например, People.Ages.Current_Age : 21).Я предполагаю, что я бы использовал $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 голосов
/ 10 декабря 2018

Вы можете использовать ниже агрегации

db.collection.aggregate([
  { "$project": {
    "name": 1, "_id": 0,
    "sizeOf": {
      "$size": {
        "$filter": {
          "input": "$People",
          "as": "people",
          "cond": { "$eq": ["$$people.Ages.Current_Age", 21] }
        }
      }
    }
  }}
])
0 голосов
/ 10 декабря 2018

Здесь вы можете использовать оператор фильтра, чтобы отфильтровать массив перед получением размера.

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