我认为你实际上是在调用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()
。
但是,一切正常,你只需要记住这是“异步”编程,并在继续执行之前,逻辑上等待执行完成,然后像“读取”写回的数据,或者确实关闭数据库连接。