我想填充一个子文档的字段,这是一个普通Schema中的已区分元素(区Notificationable分为Message或FriendRequest)。
这个问题与这个问题非常相似:mongoosejs:从不同的模式填充一个objectId的数组,两年前没有解决。由于猫鼬的进化和歧视性的发展,我再次提出这个问题。
到目前为止我尝试过的是:
Notification.find({_id: 'whatever'})
.populate({
path: 'payload',
match: {type: 'Message'},
populate: ['author', 'messageThread']
})
.populate({
path: 'payload',
match: {type: 'FriendRequest'},
populate: ['to', 'from']
})
.exec();
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为路径相同。所以我尝试了:
Notification.find({_id: 'whatever'})
.populate({
path: 'payload',
populate: [
{
path: 'messageThread',
match: {type: 'Message'},
},
{
path: 'author',
match: {type: 'Message'},
},
{
path: 'from',
match: {type: 'FriendRequest'},
},
{
path: 'to',
match: {type: 'FriendRequest'},
},
]
})
.exec();
Run Code Online (Sandbox Code Playgroud)
这也不起作用,可能是因为匹配是在子文档中执行的,因此没有field type。
有什么解决办法吗?
这是我的(主要)模型,我没有提供User或MessageThread。
主要文件:
const …Run Code Online (Sandbox Code Playgroud)