在.forEach循环中使用mongoose .findOne()的结果错误

我试图获取,操纵和保存mongoose文档,但得到错误的结果 . 请参阅下面的代码段:

x = [{id:"abc", value:10, name:"andy"}, {id:"abc", value:20, name:"mark"}];

x.forEach(function(x){
  var amount = x.value;

  y.findOne({id:x.id}).populate("name").exec(function(err, y){
      y.value += amount;
      y.save();
  });
});

每次我循环 forEach 并尝试修改 y.value ,我得到一个错误的结果 .

Expected:
loop 1: y.value = 10;
loop 2: y.value = 30;

What I get:
loop 1: y.value = 10;
loop 2: y.value = 20;

如果有人能帮助我,我将不胜感激 .

回答(1)

2 years ago

没有

id字段

在对象x中 . 只是

x.value

x.name

有效检索 . 所以你的查询需要改变 .

通常在MongoDB中,您只需使用内部_id属性来标识对象 . 你必须小心正常的foreach循环和异步操作 . 你最好使用像这样的库

异步

或async / await