express / mongoose更新查询

时间:2015-11-12 17:17:22

标签: node.js mongodb express mongoose

我在使用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很新,并表达如果有更好的解决方案甚至解决方案让我知道。

1 个答案:

答案 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);
}