2015-10-15 40 views
0

我有一個我已經插入到MongoDB中的集合。我想使用db.coll.distinct(key)檢索一個特定的值,並將其用作更新函數的值。示例Python代碼如下:db.collection.distinct()的返回值

post = {key:value} 
db.filesystem3.insert(post) 
value1 = "testing" 
ret = db.filesystem3.distinct(key) 
db.filesystem3.update({key:ret},{"$set":{key:value1}}) 
result = db.filesystem3.find() 
for i in result: 
    print i 

該文檔沒有得到更新。我在這裏錯過了什麼,或者我們不能使用獨特的領域進行更新?

+0

['collection.distinct'](http://api.mongodb.org/python/current /api/pymongo/collection.html#pymongo.collection.Collection.distinct)返回不同值的列表。你爲什麼認爲你需要'.distinct'?也許有更好的方法來做你想做的事情,所以請用你的問題[編輯鏈接](http://stackoverflow.com/posts/33138369/edit)來顯示預期結果的示例文檔。 – styvane

回答

0

對distinct的調用返回一個列表,因此您需要迭代每個返回的值。

ret = db.filesystem3.distinct(key) 
for ret_value in ret: 
    db.filesystem3.update({key:ret_value}, {"$set": {key: value1}}) 
0

RET = db.filesystem3.distinct(鍵)線將返回一個數組,所以不能直接傳遞數組更新文檔

行爲DISTINCT運算符的

不同的運算符在單個集合中查找指定字段的不同值,並且返回數組中的結果。

數組字段如果指定字段的值是一個數組, db.collection.distinct()會將該數組的每個元素視爲一個單獨的值作爲 單獨的值。 http://docs.mongodb.org/manual/reference/method/db.collection.distinct/

您可以更新這樣的代碼

for(var i=0;i<ret.length;i++){ 
var val = ret[i]; 
db.filesystem3.update({key:val},{"$set":{key:value1}}); 
} 

希望這將有助於