问题描述
使用 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。