Mongo部分文本匹配

时间:2018-01-17 00:58:48

标签: mongodb aggregate

假设我有一组子数组:

{ _id: 1, thread: [{body: "Foo"}, {body: "Test"}]},
{ _id: 2, thread: [{body: "Bar"}, {body: "Lorem"}, {body: "Ipsum"}]}

我需要搜索这些并返回子数组中匹配的body文本,结果如​​下:

{ _id: 1, thread: [{body: "Test"}]},
{ _id: 2, thread: []}

以下查询执行此操作:

db.threads.aggregate([
   {
      $project: {
         thread: {
            $filter: {
               input: "$thread",
               as: "thread",
               cond: {"$eq": {"$$thread.body": "Test"}}
            }
         }
      }
   }
])

但是,我需要对包含字符串的任何内容进行文本搜索,例如与字母e匹配的任何内容,不区分大小写。 $eq的问题是它只返回完全匹配。

我无法弄清楚如何做到这一点。

作为备注,如果有帮助,我在thread.body上有一个全文索引。

1 个答案:

答案 0 :(得分:0)

到目前为止,我有这个:

db.threads.aggregate([
   {
      $project: {
         thread: {
            $filter: {
               input: "$thread",
               as: "thread",
               cond: {$gt: [{"$indexOfBytes": ["$$thread.body", "est"]}, -1]}
            }
         }
      }
   }
])

似乎很蹩脚。寻找更好的方法来做到这一点。