7

我做错了什么或者我不明白 $push (可能不明白)。无论如何,我有以下文件:

{
  "_id" : ObjectId("501c83051d41c8753e000000"), 
  "node" : "denver", 
  "enc" : {
    "environment" : "production",
    "classes" : {
      "denver" : ""
    }
  }, 
  "inherit" : "default"
}

我正在尝试制作文件

{
  "_id" : ObjectId("501c83051d41c8753e000000"), 
  "node" : "denver", 
  "enc" : {
    "environment" : "production", 
    "classes" : {
      "denver" : "",
      "boulder" : ""
    }
  }, 
  "inherit" : "default"
}

这是我的更新声明的样子:

col.update(
  {
    'node' : 'denver'
  }, 
  {
    '$push': {
      'enc.classes' : {
        'boulder': ''
      }
    }
  },
True)

我没有收到错误,但文档永远不会更新。如果我将 $push 更改为 $set,则 denver 将替换为 boulder。

感谢您的任何帮助。

4

2 回答 2

14

$push在这种情况下不起作用,因为您试图在对象上使用数组函数。

要使用$push,您需要将数据结构更改为以下内容:

{
    "_id" : ObjectId("501c83051d41c8753e000000"), 
    "node" : "denver", 
    "enc" : {
        "environment" : "production", 
        "classes" : [
            "denver"
        ]
    }, 
    "inherit" : "default"
}

那么您的查询将是:

col.update(
    {
        'node' : 'denver'
    },
    {
        '$push': {
            'enc.classes' : 'boulder'
        }
    },
    True
)
于 2013-09-19T14:51:08.220 回答
10

此查询有效。

db.foo.update({"node": "denver"}, {"$set": {"enc.classes.boulder": ""}}
于 2012-09-05T14:56:17.617 回答