我正在使用async eachSeries
并在文档存在时更新文档。这是示例代码。
let a = [
{ user_name: "foo" }
];
async.eachSeries(a, (doc, done) => {
Foo.findOne(doc).lean(true).exec((err, doc) => {
if (err) return done(err);
Foo.findOneAndUpdate(a, {
user_last: "bar"
}, {
upsert: true,
new: true
},
(err, doc) => {
if (err) return done(err);
return done(doc);
});
});
}, (err) => {
console.log(completed);
});
有时甚至数组a
都有一个元素,findOneAndUpdate
函数在一次迭代中运行两次。我正在使用node v6.10
和mongoose
。它不会一直发生。
是否有人遇到过类似的问题。
答案 0 :(得分:1)
您可以简化代码,例如
let arr = [
{ user_name: "foo" }
];
async.eachSeries(arr, (query, done) => {
// note the removal of lean() as we want a document to use .save()
Foo.findOne(query).exec((err, doc) => {
if (err)
return done(err);
// if no document is found, judging by your code you want to create a new document
if (!doc) {
doc = new Foo();
}
// at this point you will have an existing or new document
doc.user_last = "bar";
doc.save(done);
});
}, (err) => {
if (err)
console.log(err);
else
console.log('completed');
});