我認爲你實際上是在調用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()
。
但是,一切正常,你只需要記住這是「異步」編程,並在繼續執行之前,邏輯上等待執行完成,然後像「讀取」寫回的數據,或者確實關閉數據庫連接。