0

我的问题是我无法从我的 mongodb 数据库中检索数据......而且我不知道为什么。

我可能做错了什么,这是一个不起作用的小问题。

var Db          = require('mongodb').Db,
    Server      = require('mongodb').Server;


var db = new Db('akemichat', new Server('localhost', 27017), {w:1});
db.open(function (err, p_db) {
    db = p_db;
});


db.collection('rooms', function (err, collection) {
    if (!err) {
        collection.find().toArray(function(err, items) {
            items.forEach(function(room) {
                console.log('hello'); // Never call...
            });
        });
    } else {
        console.log(err);
    }
});

请注意,我的数据库中有数据,如下所示

➜  akemichat git:(master) ✗ mongo
MongoDB shell version: 2.4.7
connecting to: test
> use akemichat
switched to db akemichat
> db.rooms.find()
{ "name" : "home", "_id" : ObjectId("527008e850305d1b7d000001") }

感谢帮助 !

注意:示例程序永远不会结束,我不知道为什么......也许是因为连接永远不会关闭但是如果我db.close()toArray回调中调用它,它将永远不会被调用,因为回调永远不会发生。

4

1 回答 1

1

node 中的很多东西都是异步的。在您尝试从您的收藏中读取数据后,您的连接已打开。

在确定您已连接后,您应该查询该集合。向下和肮脏:

var Db          = require('mongodb').Db,
    Server      = require('mongodb').Server;


var db = new Db('akemichat', new Server('localhost', 27017), {w:1});
db.open(function (err, p_db) {
    db = p_db;

    db.collection('rooms', function (err, collection) {
        if (!err) {
            collection.find().toArray(function(err, items) {
                items.forEach(function(room) {
                    console.log('hello'); // Never call...
                });
            });
        } else {
            console.log(err);
        }
    });
});

我在本地运行它并收到“你好”消息。此外,您的脚本永远不会完成,因为节点进程将一直运行,直到它关闭或崩溃。这是设计使然。这也意味着您不必一直打开和关闭 mongo 连接。您可以在应用程序启动时打开连接,并在应用程序关闭时关闭它。

于 2013-10-31T21:33:25.887 回答