Как вставить массив / список объектов в существующий документ MongoDB? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть коллекция mon go, в которой уже хранятся документы. Структура одного do c выглядит примерно так:

   "_id":ObjectId("55c3043ab165fa6355ec5c9b"),
   "address":{
      "building":"522",
      "coord":[
         -73.95171,
         40.767461
      ],
      "street":"East   74 Street",
      "zipcode":"10021"
   }
}

Теперь я хочу обновить do c, вставив новое поле "persons" со значением, являющимся списком объектов [{"name":"marcus", "contact":"420"}, {"name":"modiji", "contact":"111"}], поэтому после вставки do c должно выглядеть так:

   "_id":ObjectId("55c3043ab165fa6355ec5c9b"),
   "address":{
      "building":"522",
      "coord":[
         -73.95171,
         40.767461
      ],
      "street":"East   74 Street",
      "zipcode":"10021"
   },
   "persons":[
      {
         "name":"marcus",
         "contact":"420"
      },
      {
         "name":"modiji",
         "contact":"111"
      }
   ]
}

Может ли кто-нибудь помочь мне с правильным синтаксисом $set? Кроме того, было бы очень полезно, если бы кто-нибудь мог предложить эффективный способ обновления значения ключа, которое представляет собой список объектов, чтобы я мог sh добавить некоторые новые объекты в существующий список.

1 Ответ

1 голос
/ 10 июля 2020

Вы можете использовать команду updateOne вместе с оператором $set для достижения этой цели.

db.<Collection-Name>.updateOne({
    "_id":ObjectId("55c3043ab165fa6355ec5c9b")
}, {
    "$set": {
        "persons":[
              {
                 "name":"marcus",
                 "contact":"420"
              },
              {
                 "name":"modiji",
                 "contact":"111"
              }
       ]
    }
})

Если вы хотите поместить sh дополнительные данные в массив, вы можете использовать следующую команду .

db.<Collection-Name>.updateOne({
    "_id":ObjectId("55c3043ab165fa6355ec5c9b")
}, {
    "$push": {
        "persons": {
             "name":"sample",
             "contact":"1234"
        }
    }
})

Чтобы pu sh несколько массивов объектов в одной команде, используйте следующий запрос

db.<Collection-Name>.updateOne({
    "_id":ObjectId("55c3043ab165fa6355ec5c9b")
}, {
    "$push": {
        "persons": {
            "$each": [
                {
                     "name":"sample1",
                    "contact":"5678"
                },
                {
                     "name":"sample2",
                    "contact":"90123"
                }
            ]
        }
    }
})
...