2012-08-04 146 views
3

我做錯了什麼或者我不明白$推(可能不明白)。反正我有以下文件:

{ "_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,那麼丹佛將被巨石取代。

感謝您的任何幫助。

回答

7

此查詢適用。

db.foo.update({"node": "denver"}, {"$set": {"enc.classes.boulder": ""}} 
+1

這是最優秀的看到被接受的答案使用博爾德。 – kkurian 2013-01-31 22:33:27

+0

在PyMongo 3.x'更新'已折舊。 您可以做同樣的事情,使用以下命令將數據推送到數組: db.foo.update_one({「node」:「denver」},{「$ push」:{「enc.classes.boulder」 :「」}} – 2016-01-26 21:05:13

11

$push在這種情況下不起作用,因爲您嘗試在對象上使用數組函數。

要使用$push你需要你的數據結構更改爲以下:

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

然後將查詢將是:

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