2013-08-07 39 views
0

文件的MongoDB中假設我有一個MongoDB的集合與字典對象像這樣:更新取決於項目pymongo

{ 
    'value1' : 4 , 
    'value2' : 0 
} 

,我想在數據庫中更新,使得value2 = value1/2每個字典對象,有一個簡單的如何做到這一點?

簡單的方式做似乎沒有工作,因爲你不能參考value1值:

some_db.update( {} , { 'value2' : 'this.value1'/2 }) # wont work, right? 

的另一個方法是先進行批處理作業,由一批我自己的電腦,例如在數據批量拉我可以檢索a的值,然後更新b的值。我寧願讓服務器執行此操作。

回答

1

的MongoDB不具備此功能。你將不得不在批量工作中這樣做。如果你這樣做了,我建議你在每次更新之間讓你睡一會兒,以便服務器也能正常執行應用程序。否則,你可能會讀/寫數據庫。當然,如果你真的有(百萬)記錄的負載,那纔是真正必要的。

+0

你知道,如果這樣的功能是計劃?它似乎是一個數據庫缺少的功能(雖然沒有數據庫的人)。 如果你想將數據庫重新分配一個新的規範,你現在看起來似乎需要大量的數據,這聽起來像是需要大量額外的計算能力。 – cantdutchthis

+0

不,對不起。儘管如此,它仍在https://jira.mongodb.org/browse/SERVER-1765上進行跟蹤。 – Derick

-1

哎只是做這樣的事情在pymongo

from pymongo import MongoClient 
cursor_object = MongoClient()[your_db][your_collection] 
for object in cursor_object.find(): 
    id = object['_id'] 
    val1 = object['value1'] 
    update = val1/2 
    cursor_object.update({"_id":id},{"$set":{"value2":update}}) 
+0

這不起作用。您不能使用集合中不同列的值。 – Derick

+0

這個怎麼樣.. – jwillis0720