Mongodb обновляет поле в коллекции и в то же время автоматически генерирует другое поле

#javascript #mongodb

#javascript #mongodb

Вопрос:

У меня есть коллекция, которая содержит такие данные:

 [{
_id: a,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: true,
second: true
}},{
_id: b,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: false,
second: true
}}]
  

Я хотел бы вставить новую функцию: third: true

 db.collection.update(  { _id:...} , { $set: { features.third : true  } } 
  

Мои вопросы в том, возможно ли вставить новую строку для одной из этих функций и в то же время, когда mongodb видит, что есть поле типа «третье», а значение равно true, чем mongodb автоматически генерирует новое поле (featureConfig), значение которого является пустой строкой?
таким образом, ожидаемое значение равно :

 {
_id: b,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: false,
second: true,
third: true
},
featureConfig: "",
}
  

Любая помощь будет оценена.

Ответ №1:

Попробуйте этот запрос и проверьте, работает ли он так, как ожидалось (пример)

Это запрос:

 db.collection.aggregate([
  {
    "$match": {
      "id": 1
    }
  },
  {
    "$set": {
      "features.third": true
    }
  },
  {
    "$project": {
      "features": 1,
      "featureConfig": {
        "$cond": {
          "if": "$features.third",
          "then": "",
          "else": "$false"
        }
      }
    }
  }
])
  

Два начальных этапа те же, что и у вас, фильтруют по соответствию id и устанавливают значение. Затем я использовал $project для создания поля featureConfig , основанного на условии. Если features.third значение равно true, то создайте поле, в противном случае нет.