使用dynamic ref填充Mongoose子文档的虚拟数组可以通过以下步骤实现:
User
模型和一个Post
模型,其中User
模型包含一个虚拟数组posts
,用于存储用户的帖子。const mongoose = require('mongoose');
const postSchema = new mongoose.Schema({
title: String,
content: String
});
const userSchema = new mongoose.Schema({
name: String,
posts: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}]
});
const User = mongoose.model('User', userSchema);
const Post = mongoose.model('Post', postSchema);
User
模型中定义虚拟属性virtuals
,并使用dynamic ref
来填充子文档的虚拟数组。userSchema.virtual('virtuals.posts', {
ref: function(doc) {
return 'Post';
},
localField: '_id',
foreignField: 'author'
});
在上述代码中,我们使用了dynamic ref
来动态地填充posts
数组。ref
函数接收一个参数doc
,可以根据需要返回不同的引用模型。在这个例子中,我们始终返回'Post'
作为引用模型。
populate()
方法来填充虚拟数组。User.findById(userId)
.populate('virtuals.posts')
.exec(function(err, user) {
if (err) {
console.error(err);
} else {
console.log(user);
}
});
在上述代码中,我们使用populate()
方法来填充virtuals.posts
虚拟数组。通过执行上述代码,我们可以获取到包含填充后的子文档的用户对象。
这样,我们就可以使用dynamic ref填充Mongoose子文档的虚拟数组了。
关于腾讯云相关产品,推荐使用腾讯云数据库MongoDB版(TencentDB for MongoDB)来存储和管理MongoDB数据库。你可以通过以下链接了解更多信息:腾讯云数据库MongoDB版。
领取专属 10元无门槛券
手把手带您无忧上云