Mongoose从另一个id字段填充一个字段



我目前在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>cardIdcarId 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将始终返回一个用于虚拟填充的数组。

最新更新