javascript - 将 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
。这使我进行了调查,并调查了:
的文档
.toArray()
,一开始就不应该有论据。因此,我检查了dbo.collection("cars").find({}, { projection: { _id: 0, name: 1} }).toArray()
实际返回的内容,即[object Promise]
.1.a 不能
Promise
直接评估 a 但必须使用then
,await
或async
。1.b 我能够将 转换
Promise
为function then() { [native code] }
using.then
但我还没有找到如何进一步评估此表达式以从“[native code]
”中检索列表。await
返回错误说SyntaxError: await is only valid in async function
,而返回async car_and_name.then
错误SyntaxError: Unexpected identifier
。我还尝试将一个名为的全局变量传递给
carNames
函数,并为其分配 valuecar_and_name
,但是当我这样做时,我目前无法成功地将全局变量传递到.toArray(..)
asconsole.log(carNames);
is undefined 内部,在那个位置。
如何将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 - 在 JavaScript 对象中制作重复动画循环
- hdfs - Pig 无法创建 .bz2 文件但创建 .deflate 文件
- node.js - 从 Buffer node.js 前面移除元素
- html - 内文本的 CSS 选择器
- 元素(定义列表标签)
- vba - 如何将单元格值分成多个单元格(名称、街道、城市、州、邮编)
- arrays - Laravel 数组分组并合并每个组
- scala - 在 Scala SparkSQL 中使用 NVL2 和 NULLIF
- angularjs - 角度订阅问题
- javascript - 如何通过按下按钮将上标文本添加到 HTML 输入框?
- python - 转置 CSV 行和列