当前位置: 首页 > 知识库问答 >
问题:

node.jsMongoDB查询不返回结果

冉子石
2023-03-14

我正在玩mongob,并将一些测试数据{name:"david"}输入到“用户”集合中。我通过键入mongoshell验证了数据在MongoDB中

db.users.find()

结果:

{ "name":"david" }

在 node.js 脚本中,使用以下代码

db.open(function(err, db) {
    if (!err) {
        console.log("db opened!");
    }
    else {
        console.log(err);
    }
    db.collection('users', function(err, collection) {
        collection.find({}, function(err, cursor) {
            cursor.each(function(err, item) {
                console.log(item);
            });
        });
    });
    db.close();
});

不返回任何结果

我没有发现任何错误,也没有错误。请告知

共有3个答案

方昊阳
2023-03-14

这种模式在我的节点/mongo示例中运行良好。该函数被传递一个回调,该回调接受err,集合。它获取“用户”集合,如果成功,调用针对集合的查找并将其转换为数组,但您也可以在游标上迭代。

在db.collection和connection.find调用中,您没有检查err和处理。你只是在公开叫牌时才这么做。

此外,您不应该调用db。close(),特别是当您使用连接池选项打开时(您不想在每次调用时打开和关闭连接)。如果确实要关闭,请在回调中关闭。

类似于:

var server = new Server(host, port, {auto_reconnect: true, poolSize: 5}, {});

MyStore.prototype.getUsers = function(callback) {
server.open(function(err, db) {
    if (err) {
        callback(err);
    }
    else {
        db.collection('users', function(err, collection) {
            if( err )
                callback(err);
            else {
                collection.find().toArray(function(err, users) {
                    if (err) {
                        callback(err)
                    } else {
                        callback(null, users);
                    }
                });
            }
        }
    }});

这里有另一个关于node mongo的教程可能会有所帮助:http://howtonode.org/express-mongodb

高奇
2023-03-14

正如CJohn正确指出的那样,您在检索数据之前关闭了DB连接。我知道这看起来不像,但这是节点结构和回调的情况。正确处理这种情况的代码是:

db.open(function(err, db) {
    if (err) return console.log('error opening db, err = ', err);

    console.log("db opened!");

    db.collection('users', function(err, collection) {
        if (err) return console.log('error opening users collection, err = ', err);

        collection.find({}, function(err, cursor) {
            if (err) return console.log('error initiating find on users, err = ', err);

            cursor.each(function(err, item) {
                // watch for both errors and the end of the data
                if (err || ! item) {
                    // display (or do something more interesting) with the error
                    if (err) console.log('error walking data, err = ', err);

                    // close the connection when done OR on error
                    db.close();

                    return;
                }
                console.log(item);
            });
        });
    });
});
梅耘豪
2023-03-14

您实际上是在集合中的数据返回之前关闭了数据库连接。

db.collection('users', function(err, collection) {
  collection.find({}, function(err, cursor) {
    cursor.each(function(err, item) {
      console.log(item);
    });

    // our collection has returned, now we can close the database
    db.close();
  });
});
 类似资料:
  • 我有下面的SQL查询,我在flink工作中使用。< code>mysql_table是使用JDBC连接器创建的,而< code>kafa_source表是从传入的kafka流创建的。 我在两者之间执行时态连接,当我在Flink的sql-client CLI中检查时,运行良好(用< code>flink-faker测试)。内部查询工作得非常好,并且正在打印结果。有人能帮助我找出这个问题吗? 编辑:我

  • Firebase查询返回此查询的值 该项由model类捕获 但是,返回null

  • 以下是我的疑问.... 我没有结果。 另外,我正在使用这个插件来生成请求正文。 我的查询如下所示.. null 感谢您到目前为止的阅读,如果有人能帮助我找出如何使这一工作,我将非常感谢。

  • 问题内容: 我有一个数据库,正在运行以下查询: 上面的查询一次返回两个结果集,我不能分别触发两个查询。如何在Java类中一次处理两个结果集? 问题答案: 正确的代码来处理JDBC语句返回的多个: 重要位: 并返回以表明语句的结果只是一个数字,而不是一个。 您需要检查以了解是否还有更多结果。 确保关闭结果集或使用

  • 问题内容: 我有以下从数据库获取十六进制代码的函数 我的问题是我在回调函数中返回了结果,但getColour函数未返回任何内容。我希望getColour函数返回的值。 在我调用getColour的那一刻,它不返回任何内容 我尝试做类似的事情 但当然SELECT查询在返回值时已经完成 问题答案: 您只需要对回调中的db查询结果进行处理。就像。

  • 为什么我不能使用“findOne()”只返回一个字段?在下面的代码中,所有字段都返回。我也尝试了“findOne()”,但仍然不起作用。有人能告诉我是我弄错了还是怎么回事吗? 在这种情况下,我只想返回“信息”字段 文档如下所示: