如何通过存储库查询回送4中的特定字段?

时间:2019-05-05 21:08:19

标签: mongodb loopbackjs v4l2loopback

我想强制执行唯一性,所以我想看看是否还有其他电子邮件和用户名与发布到此路由的电子邮件和用户名相似。我该如何通过存储库进行操作,它不断询问我看到的过滤器,但仍无法解决。

@post('/users', {
    responses: {
      '200': {
        description: 'User model instance',
        content: {'application/json': {schema: {'x-ts-type': User}}},
      },
    },
  })
  async create(@requestBody() user: User): Promise<User> {
    //check : User= await this.userRepository.create(user);
    //@param.query.object('filter', getFilterSchemaFor(User)) filter?: Filter;
    // var check:any=await this.userRepository.find(filter);
    //filter: Filter;
    var check: User = await this.userRepository.find({email:user.email});
    var isNotPresent: boolean = true;
    // check.forEach(function(val){

    // });
    // if(isNotPresent)
    return await this.userRepository.create(user);
  }

1 个答案:

答案 0 :(得分:4)

Filter对象具有以下属性,可用于定义查询及其响应:

  1. where:用于定义查询。对于您的情况,您想查找具有与请求正文中提供的电子邮件和用户名相同的现有用户。
  2. fields:指定要在查询响应中包括或排除的字段。 find()返回的数组中的每个对象将仅具有true对象中设置为fields的那些字段。
  3. offsetskiplimitorder:用于分页。

因此,在您的情况下,假设“用户”具有“电子邮件”和“用户名”,则过滤器对象将如下所示:

const filter: Filter = {
    where: {
        'email': user.email,
        'username': user.username
    },
    fields: {
        email: true,
        username: true
    },
    offset: 0,
    limit: 10,
    skip: 0,
    order: [],
};

对存储库方法的调用如下所示:

var check: User = await this.userRepository.find(filter);

我的第一个SO答案。希望这会有所帮助。