在 NodeJs 中将对象从一个集合移动到另一个集合的最佳方法
Best way to move object from one collection to other in 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});
});
但是当我尝试时它崩溃了。
更新:不要介意这个答案。跟着 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});
});
});
});
您通常需要处理 "inside" 回调,但 .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
}
);
这样,在检索内容的同时,文档 "removed" 来自集合。当然,您只 .insert()
当实际文档匹配时 "inside" 来自初始 .findAndModify()
操作的回调。
少了一次数据库调用,少了一层嵌套。
如何将对象从一个集合移动到另一个集合?最简单和最安全的方法是什么?我正在尝试这样做:
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});
});
但是当我尝试时它崩溃了。
更新:不要介意这个答案。跟着 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});
});
});
});
您通常需要处理 "inside" 回调,但 .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
}
);
这样,在检索内容的同时,文档 "removed" 来自集合。当然,您只 .insert()
当实际文档匹配时 "inside" 来自初始 .findAndModify()
操作的回调。
少了一次数据库调用,少了一层嵌套。