Mongoose查找返回空数组(适用于其他集合)

我一直在相当成功地在nodejs上写了一个restful api。 MongoDB中存在两个我正在访问的集合,它们返回空string,并且恰好是名称中包含大写字母的唯一集合。 当我使用MongoClient时,我可以很好地访问这些集合,所以我知道它不是过时的mongodb驱动程序。

一个例子是当我尝试访问一个名为bulkBuds的集合

//bulkBuds model var mongoose = require('mongoose'), Schema = mongoose.Schema; var BulkBudsSchema = new Schema({ sourceLicense: String, quantity: Number, strainName: String, priceProfile: String }); mongoose.model('bulkBuds', BulkBudsSchema); 

控制器在查询中有一些额外的逻辑,但是一个简单的find也返回一个空string。

 //bulkBuds controller var express = require('express'), router = express.Router(), mongoose = require('mongoose'), BulkBuds = mongoose.model('bulkBuds'), Friends = mongoose.model('Api'), config = require('../../config/config'), jwt = require('express-jwt'); module.exports = function (app) { app.use('/api/bulkBuds/', router); }; router.get('/:license', jwt({secret: config.secret}), function (req, res, next) { if(!req.user.friend){ res.status(401); } Friends.findById(req.user.id, function(err, friend){ if(err) throw err; if(!friend) res.send("friend does not exist"); if(req.user.username != friend.username) res.send("invalid user"); console.log(req.params.license); console.log(BulkBuds.find({})); BulkBuds.find({'storeLicense': req.params.license, 'availableForSale': true}, "sourceLicense quantity strainName priceProfile", function (err, bulkBuds) { if (err) return next(err); console.log(bulkBuds); res.send(bulkBuds); }); }) }); 

任何build议将不胜感激,谢谢。

如果不能对数据库进行testing就很难回答。 但我会尝试一些事情。

  1. 重构{'storeLicense':req.params.license,'availableForSale':true}在查询之外创build对象,然后在将该对象传递给查询之前,对其进行控制台日志logging。 这将确保一切如你所愿。

  2. 作为BulkBuds.find的第二个参数,删除“sourceLicense数量strainName priceProfile”,并replace为空对象。 我通常使用以下语法{_id:1,quantity:0}传递一个对象作为第二个参数来修改投影。 你的语法可能工作,但以防万一我会尝试运行查询,而不是看看是否会产生任何结果。

  3. 确认您的数据库中的数量确实是一个数字,而不是一个string。 我知道mongoose不会让你插入不确认的logging,不确定关于查询。 最有可能不是这个问题,但不伤害,以validation。

  4. 在创buildBulkbirds模式之后,试试这个:

mongoose.model('bulkBuds',BulkBudsSchema,'bulkBuds');

另一个长镜头,但也许它与mongoose复数集合名称有关。 使用上面的语法将确保它正在查询bulkBuds集合。

再一次,如果不能进行testing,很难查明,但希望这些想法有所帮助。

Interesting Posts