gpt4 book ai didi

javascript - Node ,mongoose 'findOne' 在另一个集合的 'find' 内的一个集合上

转载 作者:可可西里 更新时间:2023-11-01 10:04:05 26 4
gpt4 key购买 nike

基本上我有一个简单的场景,首先我需要获取整个集合,例如“汽车”,然后遍历该集合并根据第一个集合中的某些条件对另一个集合执行“findOne”,例如“用户”。

所以:

// requiring modules and mongoose.connect() part
...
CarModel.find(function(err, cars) {

console.log("1");

_.each(cars, function(car) {

console.log("2");

UserModel.findOne({username: car.owner}, function(err, user) {
console.log("3");

user.some_field++;
user.save();
});
});
});

例如,当汽车集合有 2 个文档(相同的 car.owner)时,我希望“some_field”有 2 个增量,但我只得到一个。

// console.logs
1
2
2
3
3

我猜我在执行流程和异步内容方面做错了,有人能解释一下为什么这行不通吗?

最佳答案

findOne 是异步的,因此两个所有者的 findOne 结果的回调可以排队运行,其中 user.some_field 都有相同的初始值。然后每个回调运行并将新值保存为初始值加 1。

这是一个经典案例,说明为什么要使用原子 $inc 进行更新运算符代替。

UserModel.findOneAndUpdate({username: car.owner}, {$inc: {some_field: 1}},
function(err, numAffected) { ... }
);

关于javascript - Node ,mongoose 'findOne' 在另一个集合的 'find' 内的一个集合上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26654145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com