Mongoose在数组中添加/追加值



您好,很抱歉用这个标题,很难用文字来解释。

我在mongo集合中有多个级别的数据。

我试图在maps数组中插入一个值,该数组已经在favorite_lists对象数组中。下面是用户集合模式:

{
    "_id" : ObjectId("60f3fdae2367163726c6716b"),
    "username" : "Johnny65",
    "first_name" : "Thaddeus",
    "last_name" : "Lueilwitz",
    "email" : "example@gmail.com",
    "mobile" : "834XXXX",
    "profile_photo" : "http://placeimg.com/640/480",
    "login_type" : 2,
    "maps_created" : ISODate("2020-04-08T20:00:28.453Z"),
    "created_date" : ISODate("2021-06-24T16:19:07.010Z"),
    "favorite_lists" : [
        {
            "maps" : [ ],
            "name" : "name 1",
            "created_date" : ISODate("2021-07-20T13:27:56.050Z")
        },
        {
            "maps" : [ ],
            "name" : "name 2",
            "created_date" : ISODate("2021-07-20T13:31:21.985Z")
        },
        {
            "maps" : [ ],
            "name" : "name 3",
            "created_date" : ISODate("2021-07-20T13:35:32.959Z")
        }
    ]
}

我想在favorite_lists.name = "name 2"

maps数组中插入值预期结果

{
        "_id" : ObjectId("60f3fdae2367163726c6716b"),
        "username" : "Johnny65",
        "first_name" : "Thaddeus",
        "last_name" : "Lueilwitz",
        "email" : "example@gmail.com",
        "mobile" : "834XXXX",
        "profile_photo" : "http://placeimg.com/640/480",
        "login_type" : 2,
        "maps_created" : ISODate("2020-04-08T20:00:28.453Z"),
        "created_date" : ISODate("2021-06-24T16:19:07.010Z"),
        "favorite_lists" : [
            {
                "maps" : [ ],
                "name" : "name 1",
                "created_date" : ISODate("2021-07-20T13:27:56.050Z")
            },
            {
                "maps" : ["value 1", "value 2" ],
                "name" : "name 2",
                "created_date" : ISODate("2021-07-20T13:31:21.985Z")
            },
            {
                "maps" : [ ],
                "name" : "name 3",
                "created_date" : ISODate("2021-07-20T13:35:32.959Z")
            }
        ]
    }

您可以使用$$addToSet来添加数组中的元素,$each用于插入多个元素,

db.collection.updateOne({
  "favorite_lists.name": "name 2"
},
{
  $addToSet: {
    "favorite_lists.$.maps": {
      $each: [
        "value 1",
        "value 2"
      ]
    }
  }
})

游乐场

您可以在更新中使用位置操作符$来修改您想要的值。

yourModel.update({
  "favorite_lists.name": "name 2"
},
{
  "$push": {
    "favorite_lists.$.maps": {
      "$each": [
        "value 1",
        "value 2"
      ]
    }
  }
})

这个查询对mongo说:"查找存在"favorite_lists.name": "name 2"的文档并将favorite_lists.$.maps中的每个值推入(不是$如何告诉mongo在数组中更新哪个文档)数组"

例子

最新更新