Node.js .forEach循环中mongoose.findOne()的结果错误

Node.js .forEach循环中mongoose.findOne()的结果错误,node.js,mongoose,Node.js,Mongoose,我试图获取、操作和保存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 += amou

我试图获取、操作和保存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;
如果有人能在这里帮助我,我将不胜感激。

没有

id字段

在对象x中。 只是

可以有效地检索。 因此,您的查询需要更改

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

异步的


或者async/await

x.id
其中是json对象
x=[{value:10,name:“andy”},{value:20,name:“mark”}]中的
id
?刚刚更新了对象。它们都有相同的id…这是假设性的(当然id是唯一的)id必须是一个有效的对象id,像这样
ObjectId(“54759eb3c090d83494e2d804”)
x.value
x.name