首页 > 解决方案 > MongoDB 查找项目,包括来自其他引用集合的数据

问题描述

我有以下型号:

[{
  a: string
  b: string,
  c: [ObjectId, ref: Bar]
}]

酒吧

[{
  name: string
}]

现在,查询条件包含 2 个参数:q = 任意字符串和t = 任意字符串。

目标是找到 Foo 项目,其中:

Foo[a] OR Foo[b] 包含 q 或 Foo[c] 包含 Bar[name] 包含 t。q 可以定义也可以不定义,t 可以定义也可以不定义。

我还需要包括limitskipsort

简单的 Foo.find(conditions) + populate and match在这里不起作用。我猜聚合在这里可以工作,但我还不熟悉聚合。非常感谢任何帮助。

标签: mongodbmongodb-query

解决方案


您可以使用多文本索引来支持对字符串内容的文本搜索查询。

db.Foo.createIndex(
   {
     a: "text",
     cb: "text"
   }
 )

例如,您可以使用以下查询从列表“mongodb”、“javascript”和“html”中查找包含任何术语的所有 Foo:

db.Foo.find( { $text: { $search: "mongodb html javascript" } } );

推荐阅读