我目前在typegoose中有两个字段,如下所示(为猫鼬提供更好的打字(
class User {
@prop()
public car: Car; // This is a single Reference
@prop()
public carId: Ref<Car>; // This is a single Reference
}
现在,当我尝试使用mongoose的populate
方法时,它会填充Car
集合中的carId
字段。
但我需要使用carId
引用来填充car
字段。有办法做到这一点吗?
当我同时使用Car | Ref<Car>
作为类型时,无论在哪里与<Car>cardId
或carId as Car
一起使用,都需要大量转换,我需要避免这种转换,因为它失去了typescript的用途。
这个问题有什么解决办法吗?
对于public car: Car;
,您基本上是在说这是一个子文档,但事实并非如此,因此正确的类型应该是public car: Ref<Car>;
。至于选项,您可能正在搜索Virtual Populate,其中使用选项ref
来设置用于此字段的类(型号名称(,选项localField
用于查找本地文档上的id的路径,foreignField
用于比较localField
的远程路径。
示例:
class User {
@prop({ ref: () => Car, localField: 'carId', foreignField: '_id', justOne: true })
public car?: Ref<Car>; // This is now a virtual-populate
@prop({ ref: () => Car })
public carId?: Ref<Car>; // This is still a single reference, which can be populated, but should also be able to be used for virtual-populate
}
注意:如果您不希望carId
是可填充的,也可以将其定义为mongoose.Types.ObjectId
。
注意:justOne: true
是必需的,否则mongoose将始终返回一个用于虚拟填充的数组。