2017-06-21 26 views
1

coupes集合的示例记录是这样的:如何在我的数据库新领域添加到现有的文档

db.coupes.findOne() 
{ 
    "_id" : ObjectId("5949834be916d79e033500c6"), 
    "rank" : 10, 
    "brand" : "Toyota", 
    "model" : "86SE" 
} 

不过,我想,这样它看起来像下面对其进行更新:

{ 
"_id" : ObjectId("5949834be916d79e033500c6"), 
"rank" : 10, 
"brand" : "Toyota", 
"model" : "86SE", 
"engineSpec" : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} 
} 

我该怎么做到这一点?

+0

您的问题标题询问有关插入新对象;然而,你的问题中的第二个例子与第一个例子具有相同的“ObjectId”。您是否尝试更新第一个示例中显示的文档,或者您是否尝试插入新文档? – Donut

+0

我想添加新字段 –

回答

2

所以,你应该使用'update'方法并传递两个对象:第一个找到你要更新的文档,第二个 - 更新数据。

如您所见,我使用'$ set'操作符来防止对象被完全替换为传递的数据。 了解更多关于update方法和$set运营商在官方docs

db.coupes.update(
     { 
      _id: ObjectId("5949834be916d79e033500c6") 
     }, 
     { 
      $set : { 
       engineSpec : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} } 
      } 
     } 
    ) 

我用的ObjectId在我的例子中,只能找到参数,因为它正在更新单uniq的文件。其实你可以通过任何领域找到对象,但要记住,如果你有哪些有相同的字段/值的多个对象 - 你需要multi:true选项添加到您的查询来更新所有适用的文件:

db.coupes.update(
      { 
       rank: 10 
      }, 
      { 
       $set : { 
        engineSpec : {"cylinderConfiguration": "H-4", "transmission" : "6 speed auto"} } 
       } 
      }, 
      { 
       multi: true 
      } 
     ) 

这样的代码将更新等级为10的所有文档。另外,您应该注意到我在第三个对象中添加了“多个”选项,这是您之前没有看到的。阅读更多关于更新选项here

+0

@IhorFedchenko,我用新的例子更新了我的答案,在那里我更新了排名为10的所有文档。不知道它是否正是您要求的。 –

相关问题