2015-07-02 43 views
1

如何将对象从一个集合移动到另一个集合?什么是最简单和最安全的方法来做到这一点?我试着用:在NodeJs中将对象从一个集合移动到另一个集合的最佳方法

app.post('/doneList/:id',function(req, res){ 
    var id = mongojs.ObjectId(req.params.id); 
    var oneTodo; 
    db.todoList.findOne({_id: id},function(err,docs){ 
     db.doneList.insert(docs,function(err,doc){ 
      res.json(doc); 
     }); 

    }); 
    db.todoList.remove({_id: id}); 
}); 

但它崩溃时,我尝试它。

回答

2

你一般需要工作“内部”的回调,但.findAndModify()可能有很多清洁这里还有:

app.post('/doneList/:id',function(req, res){ 
    var id = mongojs.ObjectId(req.params.id); 
    var oneTodo; 
    db.todoList.findAndModify(
     { 
      "query": { "_id": id }, 
      "remove": true 
     }, 
     function(err,doc) { 
      if (doc) { 
       db.doneList.insert(doc,function(err,doc){ 
        // respond moved 
       }); 
      } else { 
       // respond was not found 
     } 
    ); 

这样的文件是在检索内容的同时,从集合中“移除”。当然你只有.insert()当一个实际的文件被匹配和“内部”的初始.findAndModify()操作回调。

对数据库的调用少一个,嵌套层次少一个。

+0

谢谢,那是我正在寻找的东西。 –

1

更新:不知道这个答案。跟Blakes Seven的回答一样,它更好。

由于您在可以插入回调之前删除它,因此崩溃。

给这一个镜头:

app.post('/doneList/:id',function(req, res){ 
    var id = mongojs.ObjectId(req.params.id); 
    var oneTodo; 
    db.todoList.findOne({_id: id},function(err,docs){ 
     db.doneList.insert(docs,function(err,doc){ 
      res.json(doc); 
      db.todoList.remove({_id: id}); 
     }); 
    }); 
}); 
+0

试过之前,不工作.. –

相关问题