回送4 / MongoDB-外键未转换为ObjectID

时间:2018-10-10 08:23:12

标签: mongodb loopbackjs loopback objectid

我正在尝试使用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);
  }
}

2 个答案:

答案 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