【发布时间】:2021-10-07 22:19:31
【问题描述】:
我遇到了Mongoose 的问题。我有多个模型:
- 交易
- 钱包
- 用户
- 组织结构
我正在尝试获取交易。
每个事务都包含一个senderWalletId 和一个receiverWalletId,它们有一个reference 到Wallet。
钱包有一个名为type 的字段可以是Organization 或User,还有一个名为owner 的字段包含对User 或Organization 的引用。我通过指向同一个钱包的type 属性值的引用路径来实现这一点,就像这样。
type: {
type: String,
enum: [
'User',
'Organization',
'Moneypot',
],
},
owner: {
type: Schema.Types.ObjectId,
refPath: "type"
}
现在,我想填充receiverWalletId 和senderWalletId 的owner。如果类型是Organization,我想检索name、phoneNumber和email。如果类型是User,我想检索firstName、lastNmae、email和phoneNumber。
我通过这段代码部分实现了这一点:
.populate({
path: 'senderWalletId',
select: ['owner', 'type'],
match: { type: { $eq: 'User' } },
populate: {
path: 'owner',
select: ['firstName', 'lastName', 'phoneNumber', 'email']
}
})
.populate({
path: 'receiverWalletId',
select: ['owner', 'type'],
match: { type: { $eq: 'User' } },
populate: {
path: 'owner',
select: ['firstName', 'lastName', 'phoneNumber', 'email']
}
})
现在的问题是,当类型等于organization 时,如何让这些群体检索name 而不是firstName 和lastName
【问题讨论】:
标签: node.js mongodb mongoose mongoose-populate