javascript - 在 Node.js 中进行同步 MongoDB 查询的正确方法是什么?

我正在使用 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)



旧解决方案 - 2013 年 6 月 ;)

现在 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/

相关文章:

shell - 为 MongoDB shell 设置默认数据库

mongodb - 在 Meteor 中运行示例的问题

mongodb - 在 MongoDB 中执行搜索/投影时如何重命名字段?

mongodb - 如何在 mongodb 配置文件中设置授权?

node.js - Nodejs 中的 Mongodb 与 Postgres

javascript - Mongoose 保存与插入与创建

mongodb - 如何在 MongoDB shell 中中止正在运行的查询?

node.js - MongoDB - 错误 : invalid schema, 预期 mongod

node.js - Mongoose - 验证电子邮件语法

mongodb - 聚合框架中的 $skip 和 $limit