Количество запросов вложенных документов на основе условий в БД Монго

У меня есть коллекция, где образец документа имеет следующую форму:

{
  "document_1": {
    "field_1": {},
    "array_1": {
      "subobject_1": {
        "subobject_field_1": "true",
        "subobject_field_2": {},
        "subobject_field_3": {}
      },
      "subobject_2": {
        "subobject_field_1": "false",
        "subobject_field_2": {},
        "subobject_field_3": {}
      }
    }
  }
}

Количество подобъектов ( array_1 ) в array_1 варьируется и не одинаково для всех документов. Я пытаюсь сделать запрос, который для каждого документа подсчитывает количество подобъектов, где subobject_field_1 имеет значение true . Я также хочу иметь возможность точно указать, какие поля возвращать, и установить дополнительные условия (в этом случае дополнительным условием будет то, что field_1 = "A" ). В этом случае вывод будет выглядеть так:

{
  "document_1": {
    "field_1": "A",
    "array_1": 1
  }
}

Я попробовал приведенный ниже код, но он дает мне только количество подобъектов, независимо от того, является ли subobject_field_1 true или false .

db.getCollection('myCollection').aggregate([
{
    $match: {field_1: 'A'}
    },
{
    $project: {field_1: 1, array_1: {$size: $array_1}}
    }
])

Заранее спасибо!

Всего 1 ответ


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

db.collection.aggregate([
  { "$match": { "field_1": "A" }},
  { "$addFields": {
    "field_2": {
      "$size": {
        "$filter": {
          "input": { "$objectToArray": "$field_2" },
          "cond": { "$eq": ["$$this.v.subdoc_field_1", "true"] }
        }
      }
    }
  }}
])

Есть идеи?

10000