0

我有一个表,其中存储在数据源中的 4 个显示列(email-firstname-lastname-skills),其中一个是“Skills”列,它是一个数组,这四列是从数据库中提取的,用户的模型是

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”?

4

2 回答 2

0

最后过滤器实际上正在工作,因为我保存的是objectID而不是字符串,所以我改变了它,一切都很好

于 2019-03-28T16:13:24.690 回答
0

由于您使用 observables,因此请利用它:

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。您可以订阅它并从中创建数据,也可以async在 HTML 中使用管道。

于 2019-03-25T14:42:08.853 回答