我正在玩mongodb并在'用户'集合中输入了一些测试数据{name:“david”}。我通过键入
验证了数据是在MongoDB中使用mongo shelldb.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();
});
不会返回任何结果
我没有看到任何错误,也没有错误的回报。请指教
答案 0 :(得分:10)
在收集集合中的数据之前,您实际上是在关闭数据库连接。
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();
});
});
答案 1 :(得分:4)
正如CJohn所说,在检索数据之前,您正在关闭数据库连接。我知道它看起来不像它,但这是Node结构和回调的情况。正确处理此问题的代码是:
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);
});
});
});
});
答案 2 :(得分:3)
此模式在我的node / mongo示例中正常工作。该函数传递一个回调,它接受错误,收集。它获取'用户'集合,如果成功,则调用查找集合并将其转换为数组,但您也可以迭代光标。
在db.collection和connection.find调用中,您没有检查错误和处理。你只是在公开电话上这样做。
此外,您不应该调用db.close(),尤其是当您使用connection pool option打开时(您不希望在每次调用时打开和关闭连接)。如果你确实想关闭,那么关闭回调内部。
类似的东西:
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
答案 3 :(得分:3)
尝试将您的节点升级到最新版本。
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
版本0.4可能无法正常工作。