在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}); }); 

但是当我尝试它时会崩溃。

       

网上收集的解决方案 "在NodeJs中将对象从一个集合移动到另一个集合的最佳方式"

你通常需要在callback中“工作”,但是.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()操作callback“内部”。

less了一个数据库调用和一个嵌套级别。

更新:没有这个答案。 用布雷克斯七的回答,更好。

它崩溃,因为您可以插入callback之前删除。

给这个镜头:

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