如何避免在猫鼬中多次查找同一文档?

时间:2016-12-22 07:34:49

标签: node.js mongodb mongoose

我是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) })

这段代码工作正常,但我不想为同一个集合进行多次查找。 如果你能提出更好,更有效的建议,那就太棒了。

提前致谢。 :)

1 个答案:

答案 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) });