我是mongoose的新手所以请原谅我,如果这听起来很愚蠢。
对于每次编辑,我都希望存储历史值,并修改我的集合的现有值。 所以这里是代码
collection.findById(type_id).select({ "history": 0 })
.then(function(data){
var changes = { data : data, by : user_id }
return collection.findOneAndUpdateAsync({_id:type_id},
{$push: {"history": changes }})
})
.then(function(data){
return collection.findOneAndUpdateAsync({_id:type_id}, info)
})
.then(function(res){
resolve(res) })
这段代码工作正常,但我不想为同一个集合进行多次查找。 如果你能提出更好,更有效的建议,那就太棒了。
提前致谢。 :)
答案 0 :(得分:1)
我不认为原子更新中的所有可能性。您可以做的最好的事情是将服务器的呼叫次数减少到两次:第一次呼叫是使用 findByIdAndUpdate()
进行的更新,new
选项设置为false(默认),这将允许您访问
更新前的数据。然后,您可以使用第二次调用来使用此数据更新历史记录。例如:
collection.findByIdAndUpdateAsync(type_id, info /*, { "new": false } */)
.then(function(data){
var changes = {
"data": data,
"by": user_id
};
return collection.findByIdAndUpdateAsync(
type_id,
{ "$push": { "history": changes } },
{ "new": true }
);
})
.then(function(res){ resolve(res) });