我刚刚开始使用 mongodb,但在尝试在集合上使用 .find() 时遇到问题。
我创建了一个数据访问对象,它打开一个特定的数据库,然后让您对其执行操作。这是代码:
The 构造函数:
var DataAccessObject = function(db_name, host, port){
this.db = new Db(db_name, new Server(host, port, {auto_reconnect: true}, {}));
this.db.open(function(){});
}
A 获取集合功能:
DataAccessObject.prototype.getCollection = function(collection_name, callback) {
this.db.collection(collection_name, function(error, collection) {
if(error) callback(error);
else callback(null, collection);
});
};
A save功能:
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);
});
}
});
};
每当我尝试做dao。findAll(错误,回调), the callback永远不会被叫到。
我已将问题范围缩小到代码的以下部分:
collection.find().toArray(function(error, result){
//... whatever is in here never gets executed
});
我看过其他人是怎么做的。事实上,我正在关注本教程 http://howtonode.org/express-mongodb很接近。似乎没有人对 collection.find().toArray() 有这个问题,而且它也没有出现在我的搜索中。
谢谢,
夏安。