我有一个模式,它有一个可以引用不同模式的字段。
var HistorySchema = new Schema({
type: {type: String, required: true},
objectId: {
type: Schema.Types.ObjectId,
required: true,
},
changed: {type: Schema.Types.Mixed}
})
此架构的文档允许我跟踪不同types
对象中发生的更改objectId
。
例如,如果从“John”User
更改name
为“Steve”,History
则文档将具有:
{
type: 'User',
objectId: '55fa6bf0831ba3fa0879e7e8',
changed: {name: {oldValue: 'John', newValue: 'Steve'}}
}
显然,type
可以有很多不同的东西。我的问题是,我可以在查询前不知道的情况下神奇地 populate
使用 objectId 字段吗?type
我知道我可以做到:
History.query({...}).populate('objectId', null, 'User').exec(...);
但这需要我知道type
构造User
查询的时间。
显然我可以手动进行第二次查询,给定type
and objectId
。
例如,是否可以ref
在运行时保存文档的类型(而不是模式)并利用它?我环顾四周,似乎没有找到方法。