Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:如何更新集合中的整个文档_Mongodb - Fatal编程技术网

MongoDB:如何更新集合中的整个文档

MongoDB:如何更新集合中的整个文档,mongodb,Mongodb,在我的应用程序中,我需要编辑一个文档。。。在编辑文档时,其他用户仍可以使用当前的[未更改]版本。例如,当我开始编辑文档时,我会在单独的集合中创建文档的新副本,完成后,我会用临时集合的新版本替换当前版本 假设collectionusers中存储的原始文档如下所示: { "_id" : ObjectId("53b986e2fe000000019a5a13"), "name" : "Joe", "birthDate" : "2080-12-11", "publications" : [

在我的应用程序中,我需要编辑一个文档。。。在编辑文档时,其他用户仍可以使用当前的[未更改]版本。例如,当我开始编辑文档时,我会在单独的集合中创建文档的新副本,完成后,我会用临时集合的新版本替换当前版本

假设collection
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
值。