繁体   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