[英]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上使用了相同的命令,并且在第一次尝试时就起作用了。
如果有人可以告诉我我做错了什么或将我指向正确的方向,那将很棒。 谢谢
当您将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.