在名为 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
。这促使我进行调查,我调查了:
The documentation of
.toArray()
,一开始就不应该进行争论。因此我检查了dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()
实际上返回的是[object Promise]
。1.a 无法评估
Promise
直接但必须使用then
,await
或async
.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
.我还尝试传递名为
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/