mon goose populate возвращает нулевой массив для заполненного объекта - PullRequest
0 голосов
/ 04 августа 2020

В основном я создал базу данных mon go и сделал модель Post, которая ссылается на пользователя с помощью _id. Я хочу получить информацию о пользователе сообщения, поэтому я сделал функцию обратного вызова в exe c (), когда я заполняю выбранного пользователя. Но результат - пустой массив. Я за исключением того, что populate.exec() помогает мне получить больше информации о таком посте

{
  posts: [  {
    _id: 5f287dd39eb82544302b974b,
    title: 'It;s a good day pt.3',
    content: 'Sunny on the morning and little cloudy in the evening :)',
    __v: 0
  }
],
  _id: 5f287adf86b8a617300122a7,
  email: 'bob@gmail.com',
  name: 'Bob',
  __v: 2
}

Однако результат будет просто

{
  posts: [],
  _id: 5f287adf86b8a617300122a7,
  email: 'bob@gmail.com',
  name: 'Bob',
  __v: 2
}

Я признателен, если кто-то кто может мне с этим помочь. Мой код js показан ниже!

let mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/blog_demo_2", {useNewUrlParser: true, useUnifiedTopology: true});

let postSchema = new mongoose.Schema({
    title: String,
    content: String
});
let Post = mongoose.model("Post", postSchema);

let userSchema = new mongoose.Schema({
    email: String,
    name: String,
    posts: [{
        type: mongoose.Schema.Types.ObjectId,
        rel: 'Post'
    }]
});
let User = mongoose.model("User", userSchema);

User.create({
    email: "bob@gmail.com",
    name: "Bob"
});

Post.create({
    title: "It's a good day pt.3",
    content: "Sunny on the morning and little cloudy in the evening :)"
}, function (err, newlyPost) {
    if(err){
        console.log(err);
    }else{
        User.findOne({email: "bob@gmail.com"}, function (err, foundUser) {
            if(err){
                console.log(err);
            }else{
                foundUser.posts.push(newlyPost);
                foundUser.save();
            }
        })
    }
});

User.findOne({email: "bob@gmail.com"}).populate("posts").exec(function (err, user) {
    if(err){
        console.log(err);
    }else{
        console.log(user);
    }
});

1 Ответ

1 голос
/ 04 августа 2020

У вас есть

   posts: [{
        type: mongoose.Schema.Types.ObjectId,
        rel: 'Post'
    }]

Это должно быть ref как в ссылке, а не rel

   posts: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Post'
    }]
...