我正在使用 MongoDB 的 Node.JS 驱动程序,我想执行一个同步查询,如下所示:
function getAThing()
{
var db = new mongo.Db("mydatabase", server, {});
db.open(function(err, db)
{
db.authenticate("myuser", "mypassword", function(err, success)
{
if (success)
{
db.collection("Things", function(err, collection)
{
collection.findOne({ name : "bob"}, function(err, thing)
{
return thing;
});
});
}
});
});
}
问题是,db.open 是一个异步调用(它不会阻塞),所以 getAThing 返回“未定义”,我希望它返回查询结果。我确信我可以使用某种阻塞机制,但我想知道执行此类操作的正确方法。
最佳答案
ES 6( Node 8+)
您可以使用async/await
await
操作符暂停异步函数的执行,直到 Promise 被解析并返回值。
这样您的代码将以同步方式工作:
const query = MySchema.findOne({ name: /tester/gi });
const userData = await query.exec();
console.log(userData)
现在 Mongo Sync可用,这是在 Node.js 中进行同步 MongoDB 查询的正确方法。
我也在用这个。您可以编写如下同步方法:
var Server = require("mongo-sync").Server;
var server = new Server('127.0.0.1');
var result = server.db("testdb").getCollection("testCollection").find().toArray();
console.log(result);
注意:它依赖于 node-fiber在 Windows 8 上存在一些问题。
编码愉快:)
https://stackoverflow.com/questions/12030248/