簡體   English   中英

無法使用Javascript從文檔(MongoDB)更新數組

[英]Update Array from Document (MongoDB) in Javascript not Working

我一直在尋找5個連續五個小時的答案,希望有人能提供幫助。 我有一個MongoDb收集結果 (我正在使用mLab),看起來像這樣:

    {
    "user":"5818be9c74aaec1824c28626"
    "results":[{
             "game_id":14578,
             "level1":-1,
             "level2":-1,
             "level3":-1
         }, 
     { ....
     }],
         { "user":....
         }
     }

“用戶”是我保存在代碼前面的MongoID,“結果”是分數的記錄。 當用戶進行新評分時,我必須更新相應級別的評分(我正在使用NodeJS)。 到目前為止,這是我嘗試過的事情之一。

 app.get('/levelCompleted/:id/:time', function (request, response) {
 var id = request.params.id;
 var time = parseInt(request.params.time);
 var u= game.getUserById(id);
 var k = "results.$.level"+(u.level);
 //I build the key to update dinamycally
 dbM.collection("results").update(
    {user:id,
    "results.game_id":u.game_id
    //u has its own game_id
    },
    {$set: {k:time}}
);
...
response.send(...);

});

我檢查了每個變量和參數的內容,還嘗試使用$ elemMatch和點表示法,設置upsert和multi,但沒有結果。 我在mongo shell上使用了相同的命令,並且在第一次嘗試時就起作用了。

用Mongo Shell更新

如果有人可以告訴我我做錯了什么或將我指向正確的方向,那將很棒。 謝謝

當您將MongoId用作MongoDB中的字段時,不能僅傳遞帶有ID的字符串來執行查詢,您必須將該字符串標識為ObjectId (Mongo中的ID類型)。 只需在node.js文件中添加一個新的require

var ObjectID = require("mongodb").ObjectID;

並在更新請求中使用導入的構造函數。

dbM.collection("results").update(
    {user:ObjectID(id),...
    ...
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM