2015-11-19 4 views
1

Я довольно часто пишущий resti api in nodejs довольно успешно. В MongoDB есть две коллекции, к которым я обращаюсь, которые возвращают пустые строки и являются единственными коллекциями, которые содержат заглавные буквы в их именах. Когда я использую MongoClient, я могу получить доступ к этим коллекциям очень хорошо, поэтому я знаю, что это не устаревший драйвер mongodb.Mongoose find возвращает пустой массив (отлично работает для других коллекций)

один пример, когда я пытаюсь получить доступ коллекцию под названием 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); 

Контроллер имеет немного избыточной логики в запросе, а просто находка возвращает пустую строку, а также.

//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); 
     }); 
     }) 
    }); 

Любые предложения были бы весьма благодарны, спасибо.

ответ

2

Очень сложно ответить, не имея возможности протестировать вашу базу данных. Но я бы попробовал несколько вещей.

  1. рефакторинг { «storeLicense»: req.params.license «availableForSale»: истинно} для создания объекта вне запроса, а затем консоль войти, что объект перед передачей его в запросе. Это обеспечит все, как вы ожидаете.

  2. Удалить «sourceLicense quantity tensionName priceProfile» в качестве второго аргумента BulkBuds.find и заменить пустым объектом. Обычно я передаю объект в качестве второго параметра со следующим синтаксисом {_id: 1, количество: 0}, чтобы изменить проекцию. Ваш синтаксис может работать, но на всякий случай я попробую запустить запрос, не видя, дает ли это какие-либо результаты.

  3. Подтверждение количества в вашем дБ действительно является числом, а не строкой. Я знаю, что mongoose не позволит вам вставлять записи, которые не проверяются, но не уверены в запросе. Скорее всего, не проблема, но не больно проверять.

  4. После создания схемы Bulkbirds попробовать это:

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

Еще один длинный выстрел, но, возможно, он имеет какое-то отношение к мангустке, плюризующей имена коллекций. Использование вышеприведенного синтаксиса гарантирует, что он запрашивает коллекцию bulkBuds.

Снова трудно определить, не будучи в состоянии проверить, но, надеюсь, эти идеи помогут.

+0

Спасибо за ответ. Это отличный совет, к сожалению, я уже сделал эти шаги, но я определенно ценю вашу помощь. – user3073234

+0

Хммм, я добавил номер 4, не уверен, что это поможет, но стоит сделать снимок. Документацию можно найти здесь. http://mongoosejs.com/docs/models.html – user2263572

+0

Странно, что оператор console.log исправил это. Это может быть проблема синхронности. – user3073234