我的情況:MongoDB上的矢量添加
我有一個只有絕對頻率結果數組的問題的小文檔。 (陣列的長度==問題選擇的數量)
例如,
{
_id: '<id>',
resultArray: [0,0,0,0,0]
}
回答一個問題會給我一個相同長度的布爾數組。
例如
answerResultArray: [0,0,1,1,0]
對於更新絕對的結果,我需要[I] 1,如果answerResultArray [I] ==真像做doc.resultArray + = answerResultArray 或遞增doc.resultArray。
如何在不讀取文檔的情況下在MongoDB上執行此操作?
我的解決方案:
它看起來真的錯了,但它的作品...
更新文檔類的。
db.myCollection.update(
{ _id: ObjectId(<id>)},
{$inc: {"resultArray.0": NumberInt(1), "resultArray.5": NumberInt(1), <...> } })
並構建一個json對象(inc
)進行更新。
function incrementAbsoluteResults(absoluteResultId, resultArray){
let inc = {};
for(let i = 0; i < resultArray.length; ++i){
const str = "resultArray." + i;
if(resultArray[i]) inc[str] = 1;
}
return QuestionResultAbsolute.update(
{_id: absoluteResultId},
{ $inc: inc }
).exec();
}
實際上,您實際上正在詢問MongoDB目前無法執行的「兩個」操作,即同時更新多個數組元素並根據現有內容進行修改。 MongoDB的下一個版本(截至編寫時)可以處理多個數組元素,但還沒有。如果它總是簡單地用'1'表示,或者對於所有匹配的元素都是一致的,那麼你也可以避開這個「那麼」。現在,你最好使用單獨的文檔而不是數組成員,在這裏你可以改變每個文檔中的「$ inc」值。 –