如何在数组中的对象内填充对象?

How to populate an object inside an object in an array?

我目前正在用 mongoose 做一个项目,但我一直陷入 mongoose populate() 方法的问题。

问题是我无法在数组中的对象中填充对象。

// * I simplified the code below.

// Profile Document
Profile = model('Profile', new Schema({
    _user: {
      type: Schema.Types.ObjectId,
      ref: 'User',
    },
    posts: [
      {
        type: Schema.Types.ObjectId,
        ref: 'Post',
        // Post = { 
        //   _id: Number,
        //   _poster: { 
        //     type: Schema.Types.ObjectId,
        //     ref: 'User',
        //   }
        // };
      },
    ],
}));

// app.js
 const profile = await Profile.findOne({ _user: userId })
    .populate('_user')  // it works
    .populate('posts')  // it works too
    .populate('posts._poster'); // it doesn't work

有什么方法可以在数组中填充嵌套对象吗?

如果你能回答我的问题就太好了。提前谢谢你。



我尝试正确访问符号以填充 *_poster*,但是,它仍然不起作用。代码如下。

    const profile = await Profile.findOne({ _user: userId })
      .populate('_user')
      .populate('posts');

    await profile.toObject();
    profile.posts.forEach((post) => {
      profile.populate('posts.post._poster');
    })

我已经测试了你的模式,效果很好,你能测试一下并告诉我吗

const profile = await Profile.findOne({
        _id: '5f108ed7ecc4881a6c35e27b',
    })
        .populate('_user')
        .populate({
            path: 'posts',
            populate: {
                path: '_poster',
                model: 'User',
            },
        })
        .exec();
    console.log(profile);