Я полагаю, что вы на самом деле звоните 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 предоставляет и example из .pipe()
для JSONStream.
Но все работает отлично, вам просто нужно помнить, что это «асинхронное» программирование и логично дождаться завершения выполнения, прежде чем переходить к некоторым, например, «считывать» записанные данные или действительно закрывать соединение с базой данных.