如何将文档从一个集合移动到另一个集合? Mongoose,MongoDB

时间:2018-05-28 15:10:03

标签: javascript mongodb express mongoose

我有一个TODO列表,我存储未完成和已完成的项目。接下来,我有按钮,一个用于删除项目(它可以工作),第二个用于检查或取消选中该项目是否已完成。

我不知道如何编写一个函数来复制和删除数组A中的项并将其放在数组B中。

这是我的架构以及如何渲染数组:

var todoSchema = new mongoose.Schema({
    name: String
});
var todoList = [];
var compList = [];
var Todo = mongoose.model("Todo", todoSchema);
// default route
app.get("/" , function(req, res){
    Todo.find({}, function(err, todoList){
        if (err) {
            console.log(err);
        } else {
            res.render("todo.ejs", {todoList: todoList, compList: compList});
        }
    })
});

以下是新项目的代码:

app.post("/newTodo", function(req, res){
    console.log("item submited");
    var newItem = new Todo({
        name: req.body.item
    });
    Todo.create(newItem, function(err, Todo){
        if (err) {
            console.log(err);
        } else {
            console.log("Inserted item: " + newItem);
        }
    })
    res.redirect("/");
});

以下是删除项目的代码:

app.get("/delete/:id", function(req, res){
    Todo.findById(req.params.id, function(err, Todo){
        if (err) {
            console.log(err);
        } else {
            console.log(req.params.id);
            Todo.remove(function(err, Todo){
                console.log("Deleted item");
                res.redirect("/");
            })
        }
    });
});

1 个答案:

答案 0 :(得分:0)

您需要增强todoSchema以跟踪Todo是否已完成。将completed: Boolean添加到您的todoSchema,然后您将需要过滤Todo.find()的结果,以便在todoList中返回未完成的待办事项,并将完成的待办事项放在compList中。由于您正在修改文档,因此所有这些逻辑都应该进入app.put调用。

顺便说一下,使用.findByIdAndRemove可以提高您的删除效率,删除条目时也应该使用app.delete代替app.get

(旁注:您不是要将文档从一个mongoose集合移动到另一个集合。每个模式定义一个集合,因为您只有一个模式,实际上存储所有todo文档(已完成或未完成)相同的Todo系列。)