MongoDB - как обновить объект, используя поле в объекте - PullRequest
0 голосов
/ 04 февраля 2020

как обновить определенный объект, используя его идентификатор в массиве сообщений, например, изменив первый объект в сообщениях, используя его идентификатор

{
"_id" : ObjectId("5e3929127b0a7599f0a33b90"),
"posts" : [ 
    {
        "title" : "title",
        "desc" : "body",
        "id" : ObjectId("5e396faeac120790c4561f4b")
    },
      {
        "title" : "title2",
        "desc" : "body2",
        "id" : ObjectId("5e396faeac120790c4561x2t")
    }
],
"name" : "jarvis",
"email" : "jarvis@yahoo.com",
"password" : "123",
"__v" : 0

}

, чтобы он был примерно таким

 {
"_id" : ObjectId("5e3929127b0a7599f0a33b90"),
"posts" : [ 
    {
        "title" : "new title",
        "desc" : "new body",
        "id" : ObjectId("5e396faeac120790c4561f4b")
    },
      {
        "title" : "title2",
        "desc" : "body2",
        "id" : ObjectId("5e396faeac120790c4561x2t")
    }
],
"name" : "jarvis",
"email" : "jarvis@yahoo.com",
"password" : "123",
"__v" : 0

}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Это будет с arrayFilters

db.col.updateMany(
   {},
   {
      $set: {
         "posts.$[p].title": "new title",
         "posts.$[p].desc": "new body"
      }
   },
   { arrayFilters: [{ "p.id": ObjectId("5e396faeac120790c4561f4b") }] }
)

arrayFilters были введены в MongoDB версии 3.6

0 голосов
/ 04 февраля 2020

Вы имеете в виду это?

yourModel.updateOne({
    "posts.id": ObjectId("5e396faeac120790c4561f4b")
}, {
    $set: {
        "posts.0.title": "new title",
        "posts.0.desc": "new body"
    }
}).then(console.log).catch(console.log);
...