MongoDb:查找包含与给定字符串匹配的标记/关键字的文档

MongoDb:查找包含与给定字符串匹配的标记/关键字的文档,mongodb,symfony,doctrine-odm,Mongodb,Symfony,Doctrine Odm,我有一个集合(Foo),其中有“关键字”字段。我想找到与给定字符串匹配的文档(至少有一个匹配的关键字),并按匹配数对它们进行排序 Foo: {name: 'Foo1', keywords: ['example', 'sample', 'keywords']}, {name: 'Foo2', keywords: ['keywords example', 'find']}, {name: 'Foo3', keywords: ['search']}, {name: 'Foo4', keywords:

我有一个集合(Foo),其中有“关键字”字段。我想找到与给定字符串匹配的文档(至少有一个匹配的关键字),并按匹配数对它们进行排序

Foo:
{name: 'Foo1', keywords: ['example', 'sample', 'keywords']},
{name: 'Foo2', keywords: ['keywords example', 'find']},
{name: 'Foo3', keywords: ['search']},
{name: 'Foo4', keywords: ['example keywords', 'find', 'example', 'search']}
因此,对于字符串
“这是示例关键字搜索”
应按以下顺序返回文档:

  • Foo4(3个匹配项-“示例关键字”、“示例”、“搜索”)
  • Foo1(2个匹配项-“示例”,“关键字”)
  • Foo3(1个匹配项-“搜索”)

  • 我正在使用Symfony3和DoctrineODM,如果它有区别的话。谢谢大家的帮助

    MongoDB支持对每个文档的匹配项进行计数,您甚至可以。(放弃为其他数据库构建的任何自动关键字检测都很有用。)

    可能重复@Severin我看不出你的链接与我的问题有什么相似之处,因为我有字符串作为输入,它不能简单地分解成单个单词你尝试过任何东西,或者只是抛出一个任务,希望有人能解决它吗?@malarzm我尝试过类似{$where:“\”这是示例关键字搜索\“。match(This.keywords)”},但它根本不起作用-它返回的文档中有空关键字数组,不管我用什么绳子。我不知道如何解决这个问题,这就是为什么我在这里问你可以尝试将关键字字符串拆分为关键字数组,并将此数组与文档中的关键字进行比较,以计算匹配数,并通过聚合管道中的匹配数对文档进行排序。