更新数组从文档(MongoDB)在Javascript不工作

Update Array from Document (MongoDB) in Javascript not Working

本文关键字:Javascript 工作 MongoDB 数组 文档 更新      更新时间:2023-09-26

我已经连续找了5个小时的答案了,希望有人能帮助我。我有一个MongoDb集合结果(我使用mLab)看起来像这样:

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

"user"是我在前一部分代码中保存的一个MongoID, "results"是一个分数记录。当用户获得新分数时,我必须更新相应级别的分数(我使用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更新

如果有人能告诉我我做错了什么,或者给我指出正确的方向,那就太好了。由于

当您在MongoDB中使用MongoId作为字段时,您不能只是传递带有id的字符串来执行查询,您必须将该字符串识别为ObjectId (Mongo中的id类型)。只需在node.js文件中添加一个新的require

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

并在更新请求中使用导入的构造函数。

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