NodeJS + MongoDB + Express - 查询不带任何结果

时间:2015-08-22 12:43:21

标签: node.js mongodb express

一直在搞乱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提示符中执行相同的查询时,文档将成功返回。

整个集合查询

collection_query

按ObjectID查询

query_objectID

按IATA文档属性查询

query_iata

直接通过MongoDB提示查询

query_mongo

在我的index.js中,我正在调用collectionDriver.js中的函数,代码摘录如下:

{{1}}

我知道ObjectID查询需要转换为BSON - 我在尝试查询文档的属性时是否缺少一些类似的要求?

提前致谢。

1 个答案:

答案 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);
        });
    });
};