【问题标题】:$text - $search aggregation after lookup mongoDB$text - 查找 mongoDB 后的 $search 聚合
【发布时间】:2021-07-24 11:04:09
【问题描述】:

我需要通过 关键字 搜索我的数据库的文档,我在 mongo 的官方网站文档中找到了 this。但是,我有几个问题:

  1. 我需要先进行查找,而 mongo 想要 $text 搜索作为第一个管道,所以如果我在此之后进行查找,那么我会从查找中排除字段。

  2. 我只需要在一些固定字段之间搜索,而不是到处搜索。

例如,我的文档如下所示:

{
  _id: ObjectId('60dcb67ebe94846b27402dc7'),
  field1: "dada",
  field2: "lalala",
  field3: "nanana",
  creator: ObjectId('632cb67ebe94846b27402dc1')
}

我需要在 field1field2creator 的一些字段中进行搜索,比如说 creator.name,我将在查找后得到这些字段。根据文档,首先我必须创建一个索引,所以让我们在field1 上进行操作。之后,我必须将 $text 聚合放在 $match 管道中,但作为它的第一个。

您认为可以先进行查找,然后再进行 $text 搜索吗?也可以指定要搜索的字段吗?

【问题讨论】:

    标签: javascript mongodb mongodb-query


    【解决方案1】:

    要执行文本搜索查询,您的集合中必须有一个文本索引。一个集合只能有一个文本搜索索引,但该索引可以覆盖多个字段。您不能创建跨多个集合的测试索引。

    此外,包含$text$match 阶段必须是管道中的第一个阶段。

    【讨论】:

    • 我明白了,谢谢。如果我想搜索 field1field2 而不是 field3,该怎么办?
    • 您可以创建一个结合field1field2的文本索引,然后使用$text运算符进行搜索。另外如果你的字段不是很大,可以考虑regex
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 2017-07-19
    • 2020-04-14
    • 2020-10-18
    • 2017-11-08
    • 2017-05-05
    • 2020-06-29
    • 2020-11-23
    相关资源
    最近更新 更多