我有一个表,其中有4个显示的列(电子邮件-名-姓-技能)存储在dataSource中, 其中之一是“技能”列,它是一个数组,这四列是从数据库中提取的,用户模型是
Email [string]
firstname [string]
lastname [string]
skills
{
skill(id - reference to _id){
_id: [id]
name: [string]
}
}
我尝试使用角度教程中的滤镜但没有运气
我在这里尝试过此代码
applyFilter(filterValue: string, abc: string) {
// this.dataSource.filter = filterValue.trim().toLowerCase();
// console.log(this.dataSource.filter)
const re = { $regex: new RegExp(filterValue).source, $options:'gi' };
this.userService.getUsers({
'$or': [
{ firstname: re} ,
{ lastname: re },
{ email: re },
{ 'skills.skill.name': re }
]
}).subscribe(users => {
this.dataSource.data = users;
// console.log(users)
})
}
我希望过滤器可以在整个表上使用,但是代码可以在除“技能”列之外的所有列上使用,是否有想法?
更新:
在该图像中有我的mongodb结构,有没有一种方法可以通过引用另一个数据库结构的“ Skill”字段自动填充“ Skillname”字段?
答案 0 :(得分:0)
由于您使用的是可观察变量,因此请充分利用它:
data$ = this.userService.getUsers(...);
search = new FormControl('');
dataSource$ = combineLatest(
this.search.valueChanges.pipe(startWith('')),
this.data$
).pipe(
map(([query, arr]) => arr.filter(item => item.XXX.includes(query)))
);
现在,您有了一个仅包含过滤结果的Observable。您可以订阅它并从中创建数据,也可以在HTML中使用async
管道。
答案 1 :(得分:0)
最后,过滤器实际上正在工作,因为我保存了objectID而不是字符串,所以我进行了更改,一切都很好