我在使用mongooseJS和ExpressJS更新mongoDB中的多个值时遇到了问题。
假设我提交了一个包含2个或更多对象的数组,从我的前端到#34;表达路由"在那里我得到了req.body参数来获取它。我的req.body看起来像这样:
[articles:
{ article: {
_id: '564209c66c23d5d20c37bd84',
quantity: 25,
},
{ article: {
_id: '564209c66c23d5d20c37bd83',
quantity: 51,
},
}]
然后我需要循环?找到要更新的数据库中的特定文章以及何时找到该文章我想要更新"数量"从前端到db。中正确文章的值。
var id = [];
var body = {};
for (var i = req.body.length - 1; i >= 0; i--) {
id.push(req.body[i].article._id);
body[i] = req.body[i].article.quantity;
};
Articles.update(
{ _id: {$in: id} },
{ $set: {quantity: body[0].article.quantity} },
{multi: true},
function(err, response){
if(err)
console.log(err);
console.log(response);
});
这段代码的问题在于我为所有文章输入了第一个数量值,我希望它是前端的正确值。感觉就像我在正确的道路上,但我对mongoDB很新,并表达如果有更好的解决方案甚至解决方案让我知道。
答案 0 :(得分:0)
Grahlie,
如果您遇到查询问题,有时可以从mongodb shell本身测试查询来训练逻辑。
如果您的文章文档的结构如下:
{
_id: ObjectId("564209c66c23d5d20c37bd84"),
quantity: 25
}
{
_id: ObjectId("564209c66c23d5d20c37bd83"),
quantity: 51
}
如果您想根据_id
更新唯一文档的数量,那么您可以使用此查询。
db.articles.update(
{"_id": "564209c66c23d5d20c37bd84"},
{$set : { "quantity" : 25}}
)
如果您想使用$in
更新具有相同数量的多个文档,但这不是您想要做的。您希望遍历req.body
数组并更新每个article
的数量。
所以你的代码就是这样:
var articles = req.body;
var updateArticle = function(article) {
Articles.update(
{_id:article._id},
{$set:{ quantity: article.quantity}},
function(err, article){
...
);
}
for(var i = 0, n = articles.length; i < n; i++){
updateArticle(articles.[i].article);
}