Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从mongoose find外部返回列表值_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 如何从mongoose find外部返回列表值

Node.js 如何从mongoose find外部返回列表值,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我使用MongoDB数据库处理任务,我试图找到所有任务等级为“OK”的任务,并将结果放入一个列表,所有任务等级为“NOK”的任务放入第二个列表,最后将其作为两个信息列表呈现到我的HTML中 问题是,当我想将查找结果作为列表返回到外部值时,它总是返回一个奇怪的Mongoose对象 我的代码: app.get("/", function(req, res) { var nok_l = tasks.find({ task_rating: "NOK" }, (err, nokTasks) =&g

我使用MongoDB数据库处理任务,我试图找到所有任务等级为“OK”的任务,并将结果放入一个列表,所有任务等级为“NOK”的任务放入第二个列表,最后将其作为两个信息列表呈现到我的HTML中

问题是,当我想将查找结果作为列表返回到外部值时,它总是返回一个奇怪的Mongoose对象

我的代码:

app.get("/", function(req, res) {
    var nok_l = tasks.find({ task_rating: "NOK" }, (err, nokTasks) => {
        if (err)
            console.log(err);
        else {
            return nokTasks;
        }
    });
    var ok_l = tasks.find({ task_rating: "OK" }, (err, okTasks) => {
        if (err)
            console.log(err);
        else {
            return okTasks;
        }
    });

    console.log(ok_l);
    res.render("tasks", {
         ok_l: ok_l,
         nok_l: nok_l
     });
});
console.log打印的结果是Mongoose的werid对象,而不是我的列表


谢谢。

问题是您打印的是猫鼬的promise对象,而不是返回的数据,因为该对象是异步的

处理这种情况的方法有很多,但最基本和“教诲性”的方法是在承诺得到解决时只返回数据:

app.get("/", function(req, res) {
    tasks.find({task_rating: "NOK"}, (err, nokTasks) => {

        if (!err) {
            tasks.find({task_rating: "OK"}, (err, okTasks) => {
                if (!err) {
                    res.render("tasks", {
                        ok_l: okTasks,
                        nok_l: nokTasks
                    });
                }
            });
        }

    });
});
但是,如果我们存储promises引用并使用以下方法解决所有问题,则此堆栈的结构会更好:


非常感谢。它起作用了!有一个更“优雅”的解决方案来处理这个场景吗?如果我有十个列表,我必须在另一个列表中找到十个(Hey@GuyCohen,我用更好的方法更新了答案;)
app.get("/", function(req, res) {
    let promises = [];

    promises.push(tasks.find({task_rating: "NOK"}).exec());
    promises.push(tasks.find({task_rating: "OK"}).exec());

    Promise.all(promises).then( (allTasks) => {
        // here it's necessary to handle the "OK" and "NOK" lists
        res.render("tasks", {
            list: allTasks
        });
    });    
});