Mongodb 如何在Mongo中更新数组中的对象
我非常擅长SQL,但即使是最简单的Mongo查询,我也在苦苦挣扎 我在Mongodb 如何在Mongo中更新数组中的对象,mongodb,updates,Mongodb,Updates,我非常擅长SQL,但即使是最简单的Mongo查询,我也在苦苦挣扎 我在post集合中的文档如下所示(简化) 我需要将所有帖子的用户id更新为'abc' 在SQL数据库中,我将有一个post表和一个comment表,并执行以下操作: UPDATE comment SET user_id = 'abc' WHERE user_id = '123' 我想你在寻找: 编辑 如果multi设置为true,我相信您也可以对集合执行类似操作: db.post.update( { user_id: 123
post
集合中的文档如下所示(简化)
我需要将所有帖子的用户id
更新为'abc'
在SQL数据库中,我将有一个post
表和一个comment
表,并执行以下操作:
UPDATE comment SET user_id = 'abc' WHERE user_id = '123'
我想你在寻找: 编辑 如果
multi
设置为true
,我相信您也可以对集合执行类似操作:
db.post.update(
{ user_id: 123 },
{ $set: { user_id: 'abc' } },
{ multi: true }
)
默认情况下,mongodb update命令将只更新一个文档
db.collection.update({document to be found},{changes to be done})
要更新多个文档,您应该包括多个关键字
db.collection.update({document to be found},{changes to be done},{multi:true})
假设您的文档结构如下所示:
{
"_id": 5,
"body": "Correct horse battery staple",
"comments": [{"user_id": "123"},{"user_id": "456"},{"user_id": "123"}]
}
{
"_id": 6,
"body": "Correct horse battery staple",
"comments": [{"user_id': "23"},{"user_id": "123"},{"user_id": "13"}]
}
在这种情况下,我可能需要更新数组中的多个元素以及多个文档。没有默认的mongodb查询来执行此操作。
相反,我将循环浏览文档,并按如下方式进行操作
// loop until all documents has been updated
while(db.post.find({'comments.user_id':'123'}).count()!=0)
{
db.post.update(
{ 'comments.user_id':'123' },
{ $set:{'comments.$.user_id':'abc'} },
{ multi:true }
)
}
在第一次循环运行后,收集后将如下所示:
{
"_id": 5,
"body": "Correct horse battery staple",
"comments": [{"user_id": "abc"},{"user_id": "456"},{"user_id": "123"}]
}
{
"_id": 6,
"body": "Correct horse battery staple",
"comments": [{"user_id": "23"},{"user_id": "abc"},{"user_id": "13"}]
}
第二次循环运行后,后期收集将类似于:
{
"_id": 5,
"body": "Correct horse battery staple",
"comments": [{"user_id": "abc"},{"user_id": "456"},{"user_id": "abc"}]
}
{
"_id": 6,
"body": "Correct horse battery staple",
"comments": [{"user_id": "23"},{"user_id": "abc"},{"user_id": "13"}]
}
在第三次循环运行中,循环被终止。您可以从v3.6使用
db.post.updateMany(
{ 'comments.user_id': '123' },
{
$set: {
'comments.$[elem].user_id': 'abc'
}
},
{
arrayFilters: [
{ 'elem.user_id': '123' }
]
}
);
我需要修改所有文档,而不仅仅是一个。我更新了我的问题,使之更加明确。可能重复
{
"_id": 5,
"body": "Correct horse battery staple",
"comments": [{"user_id": "abc"},{"user_id": "456"},{"user_id": "abc"}]
}
{
"_id": 6,
"body": "Correct horse battery staple",
"comments": [{"user_id": "23"},{"user_id": "abc"},{"user_id": "13"}]
}
db.post.updateMany(
{ 'comments.user_id': '123' },
{
$set: {
'comments.$[elem].user_id': 'abc'
}
},
{
arrayFilters: [
{ 'elem.user_id': '123' }
]
}
);