一直在搞乱NodeJS + MongoDB + Express堆栈,并遇到了执行查询的问题。我的 index.js 文件中有一些辅助方法:
CollectionDriver.prototype.findAll = function(collectionName, callback) {
this.getCollection(collectionName, function(error, the_collection) { //A
if( error ) callback(error);
else {
the_collection.find().toArray(function(error, results) { //B
if( error ) callback(error);
else callback(null, results);
});
}
});
};
CollectionDriver.prototype.get = function(collectionName, param, callback) { //A
console.log("Get by ObjectID");
this.getCollection(collectionName, function(error, the_collection) {
if (error) callback(error);
else {
var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$"); //B
if (!checkForHexRegExp.test(param)) callback({error: "invalid id"});
else the_collection.findOne({'_id':ObjectID(param)}, function(error,doc) { //C
if (error) callback(error);
else callback(null, doc);
});
}
});
};
CollectionDriver.prototype.getByIata = function(collectionName, attribute, callback) { //A
console.log('entrou no driver - encontrar por atributo - collectionName: ' + collectionName);
this.db.collection(collectionName, function(error, the_collection) {
if( error ) callback(error);
else the_collection.find({'iata': attribute}, function(error, collection) {
collection.count({}, function(error, numDocs){
console.log(numDocs);
});
});
});
};
这里的问题是 - 每当我通过GET请求指向“/ collection /”路由时,一切正常 - 渲染集合中的所有项目。此外,如果我指向“/ collection / entity”路由,通过提供ObjectID,还会返回特定项。当我尝试对/ collection / iata / value的GET请求时,不返回任何对象。但是,当我在MongoDB提示符中执行相同的查询时,文档将成功返回。
整个集合查询
按ObjectID查询
按IATA文档属性查询
直接通过MongoDB提示查询
在我的index.js中,我正在调用collectionDriver.js中的函数,代码摘录如下:
{{1}}
我知道ObjectID查询需要转换为BSON - 我在尝试查询文档的属性时是否缺少一些类似的要求?
提前致谢。
答案 0 :(得分:2)
您没有从getByIata
原型
CollectionDriver.prototype.getByIata = function(collectionName, attribute, callback) { //A
console.log('entrou no driver - encontrar por atributo - collectionName: ' + collectionName);
this.db.collection(collectionName, function(error, the_collection) {
if( error ) callback(error);
else the_collection.find({'iata': attribute}, function(error, doc) {
if (error) callback(error);
else callback(null, doc);
});
});
};