我正在尝试使用Mongo数据库建立hasMany关系。 我已经按照指南在回送4文档(https://loopback.io/doc/en/lb4/HasMany-relation.html)中创建hasMany关系,并尝试设置了differents属性,但是外键custId保存为字符串而不是ObjectID。
我还从其他主题中找到了一些其他属性或选项,但人们使用的是Loopback 3,它似乎不适用于Loopback 4。
我错过了什么吗?有什么解决方法吗?
这是我的模特:
@model()
export class Order extends Entity {
@property({
type: 'string',
id: true,
generated: true,
})
id: string;
@property({
type: 'array',
itemType: 'string',
required: true,
})
product: string[];
@property({
type: 'number',
required: true,
})
price: number;
@property({
type: 'string',
id: true,
generated: true,
})
custId: string;
constructor(data?: Partial<Order>) {
super(data);
}
}
@model()
export class Customer extends Entity {
@property({
type: 'string',
id: true,
generated: true,
})
id: string;
@property({
type: 'string',
required: true,
})
name: string;
@property({
type: 'string',
})
adress?: string;
@hasMany(() => Order, {keyTo: 'custId'})
orders?: Order[];
constructor(data?: Partial<Customer>) {
super(data);
}
}
答案 0 :(得分:1)
这是一个错误。 hasMany / belongsTo最终会将关系ID保存为字符串而不是ObjectId。您可以通过将数据库中的ID直接更改为ObjectId来进行验证,然后它将找到它。
参考:https://github.com/strongloop/loopback-next/issues/2085
此处最新的月度里程碑中也提到了此问题,因此希望它能尽快解决:https://github.com/strongloop/loopback-next/issues/2313
编辑:通过在模型中添加strictObjectIDCoercion,我可以使它正常工作,但是根据上面链接的第2085期,这可能会破坏其他功能。
@model({
settings: {
strictObjectIDCoercion: true,
}
})
答案 1 :(得分:0)
对于hasMany
关系,您需要更新order
模型。
使用以下命令更新order.model:
1. 导入客户模型
import {Customer} from './customer.model';
删除custId:字符串;
2. 供参考的客户ID只需使用
更新代码@belongsTo(() => Customer)
custId: number;
参考示例:here