Mongo将对象添加到原始对象

时间:2016-08-13 22:06:34

标签: mongodb-query

我不确定我是否在问正确的问题,但我认为这只是一个基本的mongodb问题。

我目前有这个:

{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "test@gmail.com",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2"
}

我想添加一个这样的运动对象:

{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "test@gmail.com",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises": {
            "benchpress",
            "rows",
            "curls",
}

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

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

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

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

(你有一个额外的逗号和一个丢失的curly-brace。让我们解决这个问题。) 这是我们希望在更新文档后看到的文件。

{
  "_id" : ObjectId("57af98d4d71c4efff5304335"),
  "fullname" : "test",
  "username" : "test",
  "email" : "test@gmail.com",
  "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" : "test@gmail.com",
  "password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
  "exercises" : [
    "benchpress",
    "rows",
    "curls"
  ]
}

这里scratch是指集合名称。 update方法有3个参数。

  1. 查询以查找要更新的文档
  2. 更新参数(要更新的文档)。您可以替换整个文档,也可以只替换文档的特定部分(使用$ set)。
  3. 一个可选对象,可以告诉Mongodb在文档不存在(upsert)时插入记录或更新符合条件的多个文档(multiple)。
  4. <强> EXTRA

    警告:如果在mongo shell中执行以下操作,

    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/