Обновление массива суб-документа с соответствующим элементом - PullRequest
0 голосов
/ 28 января 2019

Ниже моя схема:

{  
   "_id":ObjectId("5c49c783de72ec2ec47b95d1"),
   "placement":[  
      {  
         "offer":[  
            {  
               "sent_by":"John",
               "comment":""
            },
            {  
               "sent_by":"Mary",
               "comment":""
            }
         ]
      }
   ]
}

Я хочу обновить placement.offer.comment, где placement.offer.sent_by равно Mary, но всегда обновляет первую запись.Я не хочу указывать жестко закодированное число, например placement.0.offer.1.sent_by.

. Это должен быть документ:

{  
   "_id":ObjectId("5c49c783de72ec2ec47b95d1"),
   "placement":[  
      {  
         "offer":[  
            {  
               "sent_by":"John",
               "comment":""
            },
            {  
               "sent_by":"Mary",
               "comment":"Some comment updated"
            }
         ]
      }
   ]
}

1 Ответ

0 голосов
/ 29 января 2019

Вам потребуется использовать фильтры массива , чтобы добиться этого:

db.collection.update(
    { /* add additional query filters here */ },
    { $set: { "placement.$[].offer.$[o].comment": "Some updated comment" } },
    { arrayFilters: [ { "o.sent_by": "Mary" } ] }
)
...