MongoDB:如何更新集合中的整个文档
在我的应用程序中,我需要编辑一个文档。。。在编辑文档时,其他用户仍可以使用当前的[未更改]版本。例如,当我开始编辑文档时,我会在单独的集合中创建文档的新副本,完成后,我会用临时集合的新版本替换当前版本 假设collectionMongoDB:如何更新集合中的整个文档,mongodb,Mongodb,在我的应用程序中,我需要编辑一个文档。。。在编辑文档时,其他用户仍可以使用当前的[未更改]版本。例如,当我开始编辑文档时,我会在单独的集合中创建文档的新副本,完成后,我会用临时集合的新版本替换当前版本 假设collectionusers中存储的原始文档如下所示: { "_id" : ObjectId("53b986e2fe000000019a5a13"), "name" : "Joe", "birthDate" : "2080-12-11", "publications" : [
users
中存储的原始文档如下所示:
{
"_id" : ObjectId("53b986e2fe000000019a5a13"),
"name" : "Joe",
"birthDate" : "2080-12-11",
"publications" : [
{ "title" : "title 1", "description" : "description 1" },
{ "title" : "title 2", "description" : "description 2" }
]
}
{
"_id" : ObjectId("53b986e2fe000000019a5a13"),
"name" : "Joe",
"birthDate" : "1980-12-11",
"publications" : [
{ "title" : "bye bye", "description" : "Blah blah" },
{ "title" : "title 2", "description" : "description 2" },
{ "title" : "title 3", "description" : "description 3" }
]
}
然后,假设将上述文档复制到另一个集合(例如,users.wip
)并进行如下修改:
{
"_id" : ObjectId("53b986e2fe000000019a5a13"),
"name" : "Joe",
"birthDate" : "2080-12-11",
"publications" : [
{ "title" : "title 1", "description" : "description 1" },
{ "title" : "title 2", "description" : "description 2" }
]
}
{
"_id" : ObjectId("53b986e2fe000000019a5a13"),
"name" : "Joe",
"birthDate" : "1980-12-11",
"publications" : [
{ "title" : "bye bye", "description" : "Blah blah" },
{ "title" : "title 2", "description" : "description 2" },
{ "title" : "title 3", "description" : "description 3" }
]
}
如何替换整个文档?问题是,当我试图用
{ "$set" : {
"name" : "Joe",
"birthDate" : "1980-12-11",
"publications" : [
{ "title" : "bye bye", "description" : "Blah blah" },
{ "title" : "title 2", "description" : "description 2" },
{ "title" : "title 3", "description" : "description 3" }
]
}}
我总是收到以下错误消息:
10150 Field name duplication not allowed with modifiers
也就是说,更新整个文档的正确方法是什么?要替换整个文档,您不需要使用
$set
,只需将新文档提供给update
调用:
db.test.update({“\u id”:ObjectId(“53b986e2fe000000019a5a13”){
“_id”:ObjectId(“53b986e2fe000000019a5a13”),
“姓名”:“乔”,
“出生日期”:“1980-12-11”,
“出版物”:[
{“标题”:“再见”,“描述”:“诸如此类”},
{“标题”:“标题2”,“说明”:“说明2”},
{“标题”:“标题3”,“说明”:“说明3”}
]
})
但是,对于当前的3.0驱动程序,最好使用:
其id是否随替换而更改?
\u id
值保持不变,除非您在替换文档中提供新的\u id
值。