4

我有一个模式,它有一个可以引用不同模式的字段。

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查询的时间。

显然我可以手动进行第二次查询,给定typeand objectId

例如,是否可以ref在运行时保存文档的类型(而不是模式)并利用它?我环顾四周,似乎没有找到方法。

4

0 回答 0