过滤 MongoDB 自动完成

问题描述

使用 MongoDb Atlas 搜索索引构建自动完成聚合管道时。如何将自动完成功能限制为仅搜索特定 ID?

我正在构建搜索功能用户可以在其中搜索人员,应用程序应自动完成搜索,但用户应该只被推荐为允许查看的用户

我的管道(有效但需要过滤):

{
  'compound': {
    'should': [{
      'autocomplete': {
        'query': "John",'path': 'firstName'
      }
    },{
      'autocomplete': {
        'query': "Doe",'path': 'lastName'
      }
    },]
  }
}

如果我有一组用户可以查看的人员 ID:s,我该如何仅对具有我提供的 ID:s 的人员应用自动完成搜索

类似于 {_id: {$in myIdList}}

解决方法

您可以使用 equals operator 来匹配 ObjectID。具体来说,在您当前复合查询的 must 子句中,嵌套另一个复合查询,其中每个 ObjectID 有 1 个您要过滤的 should 子句。每个 should 子句将被定义为特定 ObjectID 的等于运算符。如果需要,我可以提供一个示例,说明它的外观。另外,提醒一下,包含 ObjectID 数组的字段需要在 Atlas Search 中建立索引,以便您可以在其上使用 equals 运算符。

,

我会考虑在您的复合查询中添加一个过滤器子句,如下所示:

{
  'compound': {
    'filter': {
      text': {
        'query': userId,'path': 'userId'
      }
    }
    'should': [{
      'autocomplete': {
        'query': "John",'path': 'firstName'
      }
    },{
      'autocomplete': {
        'query': "Doe",'path': 'lastName'
      }
    },]
  }
}

有一个很好的例子here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...