2016-07-19 5 views
0

Я пытаюсь заполнить две таблицы в мангусте и узле, и я получаю, что заполняемая ошибка не является функцией.find (...) populate не является функцией в mongoose

У меня есть поиск и в документации, кажется, что он делает то же самое, как И.

Здесь модель:

var mongoose = require('mongoose'); 
var dodleSchema = new mongoose.Schema({ 
    name: String, 
    productorId: {type: mongoose.Schema.ObjectId, ref: "Productor"}, 
    description: String, 
    ambassadorId: {type: mongoose.Schema.ObjectId, ref: "Ambassador"}, 
    accepted: { type: Boolean, default: false }, 
    read: { type: Boolean, default: false }, 
    deliveryAddress: { 
     lat: String, 
     lng: String 
    }, 
    createdAt: Date, 
    products: [ 
     { 
      primaryImage: String, 
      images: [], 
      name: String, 
      max: Number, 
      min: Number, 
      step: Number, 
      stock: Number, 
      normalPrice: Number, 
      doodlePrice: Number, 
      freeShipping: Boolean, 
      freeShippingFrom: Number 
     } 
    ], 
    endsAt: Date, 
    packagingType: String, 
    orders: [ 
     { 
      name: String, 
      email: String, 
      purchases: [ 
       { 
        productId: String, 
        quantity: Number 
       } 
      ] 
     } 
    ] 
}); 
module.exports = mongoose.model('Doodle', dodleSchema); 

, а затем обнаружить, что я использую:

router.route('/requests/:id') 
.get(function (req, res) { 
    doodleCollection 
     .find({ 
      ambassadorId: new mongodb.ObjectID(req.params.id), 
      read: false 
     }) 
     .populate('productorId') 
     .toArray(function (error, results) { 
      if (error) { 
       res.json({'error': "Ha habido un error en la extracción de requests"}); 
       return false; 
      } 

      var alertNew = false; 

      for (var i = 0; i < results.length; i++) { 
       if (results[i].read == false) { 
        readed = true; 
        break; 
       } 
      } 

      res.json({ 
       requests: results, 
       alertNew: alertNew 
      }); 
    }); 
}); 

Это ошибка, которую я получаю:

Error

+1

вы можете попробовать изменить строку о id посла в '{ambassadorId: mongoose.Types.ObjectId (req.params.id)}' –

+0

также, 'toArray' не является частью Mongoose (вы можете ссылаться на ответ на этот вопрос: http://stackoverflow.com/questions/20858299/model-find-toarray-claiming-to-not-have-toarray-method). Попробуйте удалить 'toArray()' и посмотреть, поможет ли это. –

ответ

1

Я нашел решение и был довольно прост. Казалось, вчера я был очень близок.

Я делал метод заполнения в коллекции doodleCollection, и мне нужно было сделать это в модели.

Изменение объекта, делающего поиск полностью выполненным.

Вместо doodleCollection.find(...) сейчас я звоню doodleModel.find(...) и населяет работает идеально!