MongoDB-выбор всех документов по количеству полей массива

В моем текущем проекте у меня есть такая структура:

"squad": {
    "members": [
        {
            "name": "xyz",
            "empty": true
        },
        {
            "name": "xyz",
            "empty": true
        },
        {
            "name": "xyz",
            "empty": true
        }
    ]
}

Теперь я хочу запросить каждый отряд с mongodb, который имеет, по крайней мере, 3 пустых слота. Я погуглил и нашел только aggregate и $size, которые, кажется, только выбирают количество массивов, а не что-то на поле.
Есть идеи, как это сделать?

2 ответа

  1. Он вернет все документы будут пустые слоты больше, чем 3

    db.squad.aggregate([
      {$unwind:"$squad.members"},
      {$match:{"squad.members.empty": true}},
      {$group:{_id:"$_id",count:{$sum:1}}},
      {$match: {count: {$gt: 3}}}
    ])
    
  2. Вы можете попробовать этот запрос :

    db.getCollection('collectionName').aggregate([
      {$unwind:"$squad.members"},
      {$group:{_id:"$_id",count:{$sum:{$cond: [{$eq: ['$squad.members.empty', true]}, 1, 0]}}}},
      {$match: {count: {$gte: 3}}}
    ])
    

    В этом запросе применяется условная сумма, а затем проверить количество больше или равно 3