javascript - 将 MongoDB 查询结果作为变量返回而不是控制台

标签 javascript mongodb promise return-value native-code

在名为 db_to_var.js 的 javascript 文件中我有以下函数,可以成功打印数据库查询返回的数组 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. The documentation of .toArray() ,一开始就不应该进行争论。因此我检查了dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()实际上返回的是 [object Promise]

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

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

  2. 我还尝试传递名为 carNames 的全局变量进入函数,并为其赋值car_and_name ,但我目前无法成功地将全局变量传递到 .toArray(..) 内部如console.log(carNames);当我在那个位置这样做时,它是未定义的。

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

最佳答案

以下是使用异步等待的方法。

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/

希望对你有帮助!

关于javascript - 将 MongoDB 查询结果作为变量返回而不是控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58899635/

相关文章:

javascript - "Uncaught TypeError: undefined is not a function"带有简单的 Javascript 插件

node.js - 宇宙数据库 : MongoDB sort query returning blank resultset

javascript - 如何在 $.when.apply($, Promise) 的完成回调中获取值数组

javascript - Web Worker 与 Promise

javascript - 浏览器是否仍然默默地吞下未处理的拒绝 promise ? Node 呢?

javascript - 在所有全局 javascript 后将 javascript 注入(inject)到 Sailsjs 中的特定 View /路由

javascript - 在 JavaScript 中操作 DOM 时如何规避可变性?

javascript - 负数的阶乘超过最大调用堆栈大小

c# - 在使用 .NET 驱动程序插入 MongoDB 之前验证文档

performance - MongoDB 插入第二个索引的性能