我怀疑您实际上是在致电db.close(),但没有在您的问题中告诉我们。那个,当你去.find()数据时看不到输出的情况主要是因为这里的方法是“异步”的,你需要“等待”你想要的回调执行。
这里的.forEach() 方法也应该“谨慎”使用,因为它几乎从来都不是你在生产代码中真正想要的。在 "async" 库的一点异步流控制帮助下,这同样可以正常工作:
var localdb = 'localdb',
async = require('async'),
mongojs = require('mongojs'),
collections = ['projects','homeAnimationData'],
db = mongojs(localdb,collections);
async.series(
[
function(callback) {
db.homeAnimationData.remove({},callback);
},
function(callback) {
var data = { "image": "/imagea", "width": "200px" };
db.homeAnimationData.save(data,function(err,saved) {
if (err) callback(err);
console.log('Saved');
callback();
});
},
function(callback) {
db.homeAnimationData.find({}).limit(10).toArray(function(err,docs) {
if (err) callback(err);
console.dir(docs);
callback();
});
}
],
function(err) {
if (err) throw err;
db.close();
}
);
或者替代调用.toArray()方法,你可以使用原生提供的"stream"接口:
var localdb = 'localdb',
async = require('async'),
mongojs = require('mongojs'),
collections = ['projects','homeAnimationData'],
db = mongojs(localdb,collections);
async.series(
[
function(callback) {
db.homeAnimationData.remove({},callback);
},
function(callback) {
var data = { "image": "/imagea", "width": "200px" };
db.homeAnimationData.save(data,function(err,saved) {
if (err) callback(err);
console.log('Saved');
callback();
});
},
function(callback) {
var cursor = db.homeAnimationData.find({}).limit(10);
cursor.on('data',function(data) {
cursor.pause();
console.dir(data);
cursor.resume();
});
cursor.on('err',callback);
cursor.on('end',callback);
}
],
function(err) {
if (err) throw err;
db.close();
}
);
在后一种情况下,这可以让您更好地处理更大的结果。 mongojs 文档本身为 JSONStream 提供了 example 和 .pipe()。
但一切正常,您只需要记住这是“异步”编程,并在逻辑上等待执行完成,然后再继续“读取”写入的数据,或者关闭数据库连接。