这更像是"嘿,这就是mongoose / mongodb的工作方式"反对我该怎么做?
让我指出:
Model.find({name:'jim'}, function(err, jim){
// i should happen first & find 0 jim's
new Model({name:'jim'}).save( ... );
});
Model.find({name:'jim'}, function(err, jim){
// i should happen second & find 1 jim
new Model({name:'jim'}).save( ... );
});
我希望查找内部的所有内容都可以保留以后对该模型的任何插入,直到保存新模型。有什么想法吗?
答案 0 :(得分:0)
更像是:
Model.findOne({name:"jim"}, function(err, jim) {
if (err) return handleError(err);
jim.newField = "new value";
jim.save(function (err) {
if (err) return handleError(err);
res.send(jim);
});
});
它不是原子的,因为你会发现'jim',然后在执行回调函数期间,'jim'文档可能会从一些不同的客户端操作中改变。
我链接的文档提供了更新原子文档的其他方法。
从评论中提及的答案中获得答案:
... data.locked = true;
Model.findOneAndUpdate(query, data, {upsert:true}, function(err, doc){...} );
// in your callback function - you can query against models w/ that
// locked attribute being true
//- if your logic is true keep&update record , else **remove**