MongoDB Aggregate добавляет новое поле в документы, если другое поле уже существует - PullRequest
1 голос
/ 06 марта 2020

Образец моей коллекции:

[
  {
    _id: "5e13asdfasuh",
    animal: "dog",
    gender: "male",
    age: 5,
    name: "mark",
    breed: "gold"
  },
  {
    _id: "5e13asdfasuhss",
    animal: "dog",
    name: "snow",
    age: "2",
    breed: "husky"
  }
]

В каких документах есть столбец пол , необходимо добавить поле со значением gender_count:1

Вывод:

[
  {
    "_id": "5e13asdfasuh",
    "age": 5,
    "animal": "dog",
    "breed": "gold",
    "gender": "male",
    "gender_count": 1,
    "name": "mark"
  },
  {
    "_id": "5e13asdfasuhss",
    "age": "2",
    "animal": "dog",
    "breed": "husky",
    "name": "snow"
  }
]

1 Ответ

1 голос
/ 06 марта 2020

Вы можете попробовать этот запрос:

db.collection.aggregate([
    {
        $addFields: {
            gender_count: {
                /** Check field 'gender' exists,
                 *  So if gender field doesn't exists then condition becomes false (As we're returning false),
                 *  ultimately as we're using '$$REMOVE' then gender_count will not be added to that doc */
                $cond: [
                    {
                        "$ifNull": [
                            "$gender",
                            false
                        ]
                    },
                    1,
                    "$$REMOVE"
                ]
            }
        }
    }
])

Тест: MongoDB-Playground

...