Mongoose 在对象数组内的数组内添加/追加值

时间:2021-07-23 19:14:47

标签: mongodb mongoose mongodb-query

你好,对不起标题,很难用文字解释。

我在 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")
        }
    ]
}

我想在 maps 数组中插入值,其中 favorite_lists.name = "name 2"

预期结果

{
        "_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")
            }
        ]
    }

2 个答案:

答案 0 :(得分:1)

您可以使用 $ 位置和 $addToSet 来追加数组中的元素,使用 $each 插入多个元素,

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

Playground

答案 1 :(得分:1)

您可以在更新中使用 positional operator $ 来修改您想要的值。

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 在数组 upadte 中的哪个文档)数组中的每个值”。

示例here