代码检查数据库中是否存在文档(使用预保存 Hook ),如果不存在则将其插入。它工作正常,但不适用于第一个文档。它总是被插入。似乎第一个文档没有触发预保存 Hook 。
Model = require('./model')
var model = new Model();
//Before saving, check if the product exists
Model.schema.pre('save', function (next) {
var self = this;
Model.findOne({apiProductId: self.apiProductId}, function (err, product) {
if (!product) {
next();
}
else {
next(new Error("Product exists: " + self.apiProductId));
}
});
});
model.save(function (err, document) {
if (err) {
console.log(err);
}
else {
console.log('Inserted: ' + document.apiProductId);
}
});
最佳答案
预保存钩子(Hook)不是避免重复的正确方法。您应该使用 findOneAndUpdate
。
您的问题可能是:
- 您正在尝试异步保存多个文档: Hook 执行顺序不可预测
- 您已经在
apiProductId
上创建了一个稀疏索引,并且正在检查一个null
值。
关于node.js - Mongoose 总是插入第一个文档并跳过预保存 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37784357/