2015-06-02 6 views
1

, поэтому я был на нем как 4 часа, прочитал документацию несколько раз и все еще не мог понять мою проблему. Я пытаюсь сделать простой populate() для моей модели. У меня есть модель пользователя и модель магазина. Пользователь имеет массив favoriteStores, который содержит _id магазинов. Я ищу, что этот массив будет заполнен данными магазина.Mongoose populate() возвращает пустой массив

user.model

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
     username: String, 
     name: {first: String, last: String}, 
     favoriteStores: [{type: Schema.Types.ObjectId, ref: 'Store'}], 
     modifiedOn: {type: Date, default: Date.now}, 
     createdOn: Date, 
     lastLogin: Date 
}); 

UserSchema.statics.getFavoriteStores = function (userId, callback) { 
    this 
    .findById(userId) 
    .populate('favoriteStores') 
    .exec(function (err, stores) { 
     callback(err, stores); 
    }); 
} 

И еще один файл:

store.model

var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

var StoreSchema = new Schema({ 
    name: String, 
    route: String, 
    tagline: String, 
    logo: String 

}); 

module.exports = mongoose.model('Store', StoreSchema); 

После запуска этого я получаю:

{ 
    "_id": "556dc40b44f14c0c252c5604", 
    "username": "adiv.rulez", 
    "__v": 0, 
    "modifiedOn": "2015-06-02T14:56:11.074Z", 
    "favoriteStores": [], 
    "name": { 
     "first": "Adiv", 
     "last": "Ohayon" 
    } 
} 

В favoriteStores есть пусто, даже ты gh, когда я просто делаю покупки в магазинах без заполнения, он отображает _id в магазине.

Любая помощь очень ценится! Спасибо;)

UPDATE После использования deepPopulate plugin магически неподвижных его. Я предполагаю, что проблема связана с вложением userSchema. Все еще не уверен, что проблема была в точности, но по крайней мере она исправлена.

+1

Вы загрузили модуль «store.model» по крайней мере один раз, где-то в вашем коде, перед вызовом 'функцию getFavoriteStores'? Если нет, модель магазина не будет зарегистрирована в мангусте, и заполнение не удастся. –

+0

@BrianShamblen Да, я попробовал добавить var Store = require ('../ store/store.model'); как в модели, так и в контроллере. Я все еще что-то пропустил в отношении регистрации модели магазина? –

+0

Какую версию мангуста вы используете? –

ответ

0

Я думаю, что эта проблема возникает, когда схемы определены для нескольких файлов. Чтобы решить эту проблему, попробуйте позвонить populate таким образом:

 
.populate({path: 'favoriteStores', model: 'Store'})