gpt4 book ai didi

mongoose - 如何使用动态引用填充 Mongoose 子文档的虚拟数组?

转载 作者:行者123 更新时间:2023-12-05 07:18:17 29 4
gpt4 key购买 nike

我可以在 Mongoose 的子文档数组中填充动态引用(使用“refPath”)虚拟字段吗?

数据结构如下

Group
- Members -> User

代码:模型/模式

let MemberSchema = new Schema({
userId: {
type: Schema.Types.ObjectId,
refPath: 'userRef',
required: true
},
userRef: {
type: String,
required: true,
enum: ['Admin', 'User'],
default: 'Admin'
},
isCreator: {
type: Boolean,
required: true,
default: false
},
isManager: {
type: Boolean,
required: true,
default: false
},
alias: {
type: String,
required: true
},
joined: {
type: Number,
required: true,
default: UTIL.getTimestamp()
}
}, {
toObject: {
virtuals: true
},
toJSON: {
virtuals: true
}
})

MemberSchema.virtual('user', {
ref: (doc: IMember) => doc.userRef,
localField: 'userId',
foreignField: '_id',
justOne: true
})

let GroupSchema = new Schema({
title: {
type: String,
required: true
},
slug: {
type: String,
required: true,
default: randomstring.generate({
length: CONFIG.GROUP_NAME_LENGTH,
charset: CONFIG.GROUP_NAME_CHARSET
})
},
updated: {
type: Number,
required: true,
default: UTIL.getTimestamp()
},
members: [MemberSchema]
}, {
toObject: {
virtuals: true
},
toJSON: {
virtuals: true
}
})

export default model('Group', GroupSchema)

代码: Controller

export function get(req, res) {
GroupModel
.findOne({
slug: req.params.slug
})
.populate({
path: 'members.user'
})
.exec()
.then((data) => {
if (data) {
res.status(200).json(data)
} else {
res.status(404).send()
}
})
.catch((err) => {
res.status(res.statusCode).send()
console.log(err)
})
}

如果我将 {model: 'Admin'} 添加到填充选项,我将得到一个填充用户,但这完全违背了目的。

请帮忙,我已经处理这个问题将近 24 小时了。

最佳答案

与其使用虚拟机,我建议更改 userIduser并通过更改 refPath 来填充它来自 userRefmembers.userRef :

let MemberSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
refPath: 'members.userRef',
required: true
},
userRef: {
type: String,
required: true,
enum: ['Admin', 'User'],
default: 'Admin'
},
...
})
...

////// Controller:

GroupModel
.findOne({
slug: req.params.slug
})
.populate({
path: 'members.user'
})

关于mongoose - 如何使用动态引用填充 Mongoose 子文档的虚拟数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58404480/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com