你好,对不起标题,很难用文字解释。
我在 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")
}
]
}
答案 0 :(得分:1)
您可以使用 $
位置和 $addToSet
来追加数组中的元素,使用 $each
插入多个元素,
db.collection.updateOne({
"favorite_lists.name": "name 2"
},
{
$addToSet: {
"favorite_lists.$.maps": {
$each: [
"value 1",
"value 2"
]
}
}
})
答案 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