您好,很抱歉用这个标题,很难用文字来解释。
我在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在数组中更新哪个文档)数组"
例子