我是新來的mongodb,所以強調出來,因爲mongodb的不完整的文檔留給我的試驗和錯誤...可悲的是,我所有的嘗試都沒有工作沒有錯誤,讓我困惑什麼正在發生什麼調試......Mongodb更新與upsert和多語法
我只需要更新數據庫上匹配特定條件的多個記錄,並且爲不存在的記錄創建新條目。我相信我可以通過更新,upsert和multi的單一數據庫訪問來完成。下面是我想出:
dbschema.Person.update({ person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { options: { upsert: true, multi: true } });
我也嘗試多種組合,甚至是舊版本,如:
dbschema.Person.update({ person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { upsert: true }, { multi: true });
他們沒有工作......
請幫助我這麼瑣碎的東西......我可以很容易地在SQL中做到這一點,但nosql的東西是如此限制我..謝謝!
編輯:
上找到相同的查詢工作完美:
dbschema.Person.find({ person_id: { $in: ["734533604" ,"701084015"] } }, function (err, results) {
console.log('result: ' + results);
console.log('error: ' + err);
console.log('result length: ' + results.length);
});
編輯:
我期待的「未找到」的記錄被創建,並且找到的記錄是更新。我的邏輯可能有缺陷,現在我非常困惑。我最初一次發現()一條記錄,更改值,併爲每條修改的記錄調用save(),但是當我部署到現場時,響應時間變爲數百倍慢特別是當每個請求中有幾百條記錄需要更新時。
然後我發現find()+ $ in,並且性能得到恢復,甚至比以前更好(當查詢時),但更新仍然令人無法接受地慢。因此,現在我正在尋找方法來更新所有文檔在一個查詢..
我通常做的SQL是使用更新時,CASE THEN ...如:
它不可能 – 2013-05-01 18:02:36
你有幾個問題,一些是語法的但是其他的設計。如果您正在查找2條匹配的記錄,並且沒有找到,您是否期望兩者都被創建?如果找到兩個中的一個,你是否期望更新一個並創建一個? Upsert最多可以創建一條新記錄,這就是爲什麼multi和upsert有時並不合理。 – 2013-05-01 20:10:38
是的,我期待如果沒有找到這兩者,如果找到了,它會被更新,而那些沒有被發現的東西被創建..你是對的,我很困惑,也許我的邏輯是有缺陷的以及..但我會解釋爲什麼我試圖這樣做.. – Zennichimaro 2013-05-02 01:46:28