Задать вопрос
@Mariik

Как правильно использовать .populate() в Mongoose?

Привет.

Что-то я совсем запутался с популяцией в монгусе. Есть такой вот простенький код:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

mongoose.connect(`mongodb://localhost:27017/testDB`);

var UserSchema = new Schema({
    name:String,
    post: {
        type: Schema.Types.ObjectId,
        ref: 'Post'
    }
});
var PostSchema =  new Schema({
    title:String,
    subscriber:{
        type:Schema.Types.ObjectId,
        ref:'Subscriber'
    }
});

var SubscriberSchema = new Schema({
    name:String
});

var User =  mongoose.model("User", UserSchema);
var Post = mongoose.model('Post',PostSchema);
var Subscriber = mongoose.model('Subscriber',SubscriberSchema);
User
    .find()
    .populate([{
        path:'post',
        model:'Post',
        populate:{
            model:'Subscriber',
            path:'subscriber'
        }
    }])
    .exec()
    .then(function(data){
        console.log(data);
        mongoose.disconnect();
    });


Получается что User наполняется данными с модели Post, но вот сам Post данные от модели Subscriber не получает. И я вообще не понимаю почему так происходит.
  • Вопрос задан
  • 9588 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
kirill89
@kirill89
Проверил у себя, проблему воспроизвести не смог.

Создал тестовые данные:
let s = new Subscriber({name:'Sn'});
let p = new Post({title:'Pt',subscriber:s });
let u = new User({name:'Un', post: p});

s.save();
p.save();
u.save();


После выполнения вашего кода получил такой результат:
[
  {
    "_id": "58a81fd04396bb59443950e0",
    "name": "Un",
    "post": {
      "_id": "58a81fd04396bb59443950df",
      "title": "Pt",
      "subscriber": {
        "_id": "58a81fd04396bb59443950de",
        "name": "Sn",
        "__v": 0
      },
      "__v": 0
    },
    "__v": 0
  }
]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы