2016-08-13 127 views
0

我不确定我是否问正确的问题,但我认为这只是一个基本的mongodb问题。Mongo将对象添加到原始对象

目前,我有这样的:

{ 
"_id" : ObjectId("57af98d4d71c4efff5304335"), 
"fullname" : "test", 
"username" : "test", 
"email" : "[email protected]", 
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2" 
} 

,我想补充的练习对象是这样的:

{ 
"_id" : ObjectId("57af98d4d71c4efff5304335"), 
"fullname" : "test", 
"username" : "test", 
"email" : "[email protected]", 
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2", 
"exercises": { 
      "benchpress", 
      "rows", 
      "curls", 
} 

我只是不确定如何创建对象的练习,而无需使用$push这只是打开一个数组。我不想要一个数组,我想要一个对象。

任何帮助将不胜感激。

回答

1

object是一个键值对。在第二个文档的表示中,嵌套文档exercises作为键和它的值作为仅包含字符串的对象。你没看到有什么奇怪的东西吗?没有键的对象?

它应该可能是字符串的array。请注意,array确实是object,其中密钥是从0开始的数字索引,值是该位置的string

(您有一个逗号和一个缺少的curly-brace。让我们修复该问题。) 这是我们希望在更新文档后看到的文档。

{ 
    "_id" : ObjectId("57af98d4d71c4efff5304335"), 
    "fullname" : "test", 
    "username" : "test", 
    "email" : "[email protected]", 
    "password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2", 
    "exercises": [ 
     "benchpress", 
     "rows", 
     "curls" 
    ] 
} 

现在,回到你的问题。我们如何使用练习文件更新现有文件?它非常简单。 Mongodb有一个'更新'方法,正是这样做。由于我们不想替换整个文档并只添加其他字段,因此我们应该使用$set来更新特定字段。启动mongo shell并使用use db-name切换到您的数据库。然后执行以下命令。我假设你有一个id ObjectId(“57af98d4d71c4efff5304335”)的现有文档。请注意,ObjectId是一个BSON数据类型。

db.scratch.update({ "_id" : ObjectId("57af98d4d71c4efff5304335") }, { $set: {"exercises": ["benchpress", "rows", "curls"] } }) 

这将更新文档

{ 
    "_id" : ObjectId("57af98d4d71c4efff5304335"), 
    "fullname" : "test", 
    "username" : "test", 
    "email" : "[email protected]", 
    "password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2", 
    "exercises" : [ 
    "benchpress", 
    "rows", 
    "curls" 
    ] 
} 

这里划伤指的是集合名称。 update方法需要3个参数。

  1. 查询找到更新
  2. 更新参数(文档更新)的文件。您可以替换整个文档或仅替换文档的特定部分(使用$ set)。
  3. 一个可选对象,可告诉Mongodb在文档不存在的情况下插入记录(upsert)或更新符合条件的多个文档(multiple)。

EXTRA

警告:如果您执行在蒙戈外壳下面,

db.scratch.update({ "_id" : ObjectId("57af98d4d71c4efff5304335") }, {"exercises": ["benchpress", "rows", "curls"] }) 

整个文档会除了_id现场进行更换。因此,该记录将如下所示:

{ 
"_id" : ObjectId("57af98d4d71c4efff5304335"), 
    "exercises" : [ 
    "benchpress", 
    "rows", 
    "curls" 
    ] 
} 

您应该只在知道后果时执行此操作。

希望这会有所帮助。

欲了解更多信息,请参阅https://docs.mongodb.com/manual/reference/method/db.collection.update/