2012-09-30 165 views
1

作为一部分for-in循环使用Python中pymongo我想添加一些嵌套的文件/一个linktype场是成为links领域内的内部对象: 无论是links场或linktype字段在第一个这样的条目被添加之前存在。

这是什么命令?

这里是添加链接前一个项目:

item = { 
    "_id" : ObjectId("5067c26b9d595266e25e825a"), 
    "name": "a Name" 
} 

并添加typeA类型的一个链接后:

toType = "typeA" 
to_link = {"_id" : ObjectId("5067c26b9d595266e25e825b"), "property":"value"} 

{ 
    "_id" : ObjectId("5067c26b9d595266e25e825a"), 
    "name": "a Name", 
    "links" : { 
     "typeA":{ 
      {"_id" : ObjectId("5067c26b9d595266e25e825b"), "property":"value"}  
     } 
    } 
} 

我曾尝试:

db.collection.update({"name":"a Name"},{{"links":{"$addToSet":{toType:to_link}}}) 

它不工作。 如果我只是用:

db.collection.update({"name":"a Name"},{ {"$addToSet":{toType:to_link}}) 

的作品,但是这不是我想要的。

回答

1

$addToSet用于添加到数组。要将新属性添加到您需要使用$set运营商和dot notation为现有的嵌入式对象:

db.collection.update({name: 'a name'}, {$set: {'links.' + toType: to_link}}) 
+0

我才意识到我其实是想'typeA'是对象的数组。所以使用你的答案我已经意识到我正在寻找:'from_collection.update({“ID”:fromID},{“$ addToSet”:{'links。'+ toType:to_link}})'。尽管你已经回答了我的问题。 – johowie