Вставка нового объекта во вложенный массив - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть документ в mongodb следующим образом:

{
   "_id" : 1,
   "name" : "Christine Franklin",
   "degrees" : [
      {
         "level" : "Master",
         info:[ {"major" : "Biology",
         "completion_year" : 2010,
         "faculty" : "Science"}]
      },
    {
         "level" : "Bachelor",
         info : [{"major" : "Biology",
         "completion_year" : 2008,
         "faculty" : "Science"}]
      }
]

}

Я хочу добавить новый_объект (упомянутый ниже) в массив «info», только если «level» - «Bachelor». Как написать запрос в node.js?

new_object = {"major" : "chemistry",
         "completion_year" : 2010,
         "faculty" : "Science"}

Итоговый документ должен выглядеть следующим образом:

{
   "_id" : 1,
   "name" : "Christine Franklin",
   "degrees" : [
      {
         "level" : "Master",
         info:[ {"major" : "Biology",
         "completion_year" : 2010,
         "faculty" : "Science"}]
      },
    {
         "level" : "Bachelor",
         info : [{"major" : "Biology",
         "completion_year" : 2008,
         "faculty" : "Science"},{"major" : "chemistry",
         "completion_year" : 2010,
         "faculty" : "Science"}]
      }
]

}

1 Ответ

0 голосов
/ 07 апреля 2019

Вы можете использовать оператор $ push в методе обновления с параметром arrayFilters

db.test.update(
  { _id: 1 },
  { $push : { "degrees.$[degree].info" : 
      {
          "major" : "chemistry",
          "completion_year" : 2010,
          "faculty" : "Science"
      } 
  }},
{ arrayFilters : [ {"degree.level" : { $eq: "Bachelor" } } ], multi : true }

)

Отфильтрованный позиционный оператор

Оператор $ push

...