首页 > 解决方案 > 将 MongoDB 查询结果作为变量返回而不是控制台

问题描述

在一个名为的 javascript 文件db_to_var.js中,我有以下函数,该函数成功地将查询返回的数组打印到数据库test_db,到console.log(). (例如,一个名为的数据库cars有一个键name来描述品牌名称,例如toyota, hyunday,volvo。)。该方法使用:调用console.log("listCars function call="+listCars());并包含:

function listCars() { 
    car_and_name_grandparent = MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        var dbo = db.db("testdb");

        car_and_name_parent = dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray(function(err, result) {
            if (err) throw err;
            car_and_name = result;
            db.close();

            console.log("car_and_name="+car_and_name);
            return car_and_name;
        });

        return car_and_name_parent;
    });

    return car_and_name_grandparent;
}; 

但是,car_and_name_parent保持未定义,因为car_and_name正确填充的 ,实际上并没有返回到car_and_name_parent。这使我进行了调查,并调查了:

  1. 的文档.toArray(),一开始就不应该有论据。因此,我检查了dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()实际返回的内容,即[object Promise].

    1.a 不能Promise直接评估 a 但必须使用then,awaitasync

    1.b 我能够将 转换Promisefunction then() { [native code] } using.then但我还没有找到如何进一步评估此表达式以从“ [native code]”中检索列表。await返回错误说SyntaxError: await is only valid in async function,而返回 async car_and_name.then错误 SyntaxError: Unexpected identifier

  2. 我还尝试将一个名为的全局变量传递给carNames函数,并为其分配 value car_and_name,但是当我这样做时,我目前无法成功地将全局变量传递到.toArray(..)as console.log(carNames);is undefined 内部,在那个位置。

如何将car_and_name变量返回到函数外的变量listCars()

标签: javascriptmongodbpromisereturn-valuenative-code

解决方案


这是使用异步等待的方法。

async function listCars() {
    let db = await MongoClient.connect(url);
    let dbo = db.db("testdb");
    return await dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()
}

listCars().then(cars => {
    console.log(cars); //You will get your results here
})

nodejs 中的 mongoDB 查询像上面这样是异步的,所以你不能直接在变量中获取返回值。您要么必须使用回调函数,要么必须.then()使用上面示例中的 Promise。

您使用的 toArray() 函数是一种 MongoDB 方法,您在问题中提到的方法是 jQuery 方法。这是供您参考的正确文档-> https://docs.mongodb.com/manual/reference/method/cursor.toArray/

希望能帮助到你!


推荐阅读