mongodb を使い始めたばかりですが、コレクションで .find() を使用しようとすると問題が発生します。
特定のデータベースを開いて、それに対して操作を実行できる DataAccessObject を作成しました。コードは次のとおりです。
コンストラクター:
var DataAccessObject = function(db_name, host, port){
this.db = new Db(db_name, new Server(host, port, {auto_reconnect: true}, {}));
this.db.open(function(){});
}
getCollection関数:
DataAccessObject.prototype.getCollection = function(collection_name, callback) {
this.db.collection(collection_name, function(error, collection) {
if(error) callback(error);
else callback(null, collection);
});
};
セーブ機能:
DataAccessObject.prototype.save = function(collection_name, data, callback){
this.getCollection(collection_name, function(error, collection){
if(error) callback(error);
else{
//in case it's just one article and not an array of articles
if(typeof (data.length) === 'undefined'){
data = [data];
}
//insert to collection
collection.insert(data, function(){
callback(null, data);
});
}
});
}
そして、問題があると思われるもの - findAll 関数:
DataAccessObject.prototype.findAll = function(collection_name, callback) {
this.getCollection(collection_name, function(error, collection) {
if(error) callback(error)
else {
collection.find().toArray(function(error, results){
if(error) callback(error);
else callback(null, results);
});
}
});
};
ダオしようとするときはいつでも。findAll(error, callback)、コールバックは呼び出されません。問題をコードの次の部分に絞り込みました。
collection.find().toArray(function(error, result){
//... whatever is in here never gets executed
});
私は他の人がそれをどのように行っているかを見てきました。実際、私はこのチュートリアルに非常に厳密に従っています。colelction.find().toArray() でこの問題を抱えている人は他にいないようで、私の検索では出てきません。
ありがとう、サーン。