如何通过存储库查询环回 4 中的特定字段?
How do I query a particular field in loopback 4 through the repository?
我想强制唯一性,所以我想看看是否有任何其他电子邮件和用户名与发布到此路由的相似。我如何通过存储库做到这一点,它一直在询问我看到但无法理解的过滤器。
@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);
}
Filter
对象具有以下可用于定义查询及其响应的属性:
where
:用于定义查询。在您的情况下,您希望找到与请求正文中提供的电子邮件和用户名相同的现有用户。
fields
:指定您希望在查询响应中包含或排除的字段。 find()
返回的数组中的每个对象将只包含在 fields
对象中设置为 true
的那些字段。
offset
、skip
、limit
和order
:用于分页。
因此,在您的情况下,假设 'user' 具有 'email' 和 'username',过滤器对象将如下所示:
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 回答。希望这有帮助。
我想强制唯一性,所以我想看看是否有任何其他电子邮件和用户名与发布到此路由的相似。我如何通过存储库做到这一点,它一直在询问我看到但无法理解的过滤器。
@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);
}
Filter
对象具有以下可用于定义查询及其响应的属性:
where
:用于定义查询。在您的情况下,您希望找到与请求正文中提供的电子邮件和用户名相同的现有用户。fields
:指定您希望在查询响应中包含或排除的字段。find()
返回的数组中的每个对象将只包含在fields
对象中设置为true
的那些字段。offset
、skip
、limit
和order
:用于分页。
因此,在您的情况下,假设 'user' 具有 'email' 和 'username',过滤器对象将如下所示:
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 回答。希望这有帮助。