【问题标题】:Search collection fields and populated fields at the same time同时搜索集合字段和填充字段
【发布时间】:2021-07-06 19:13:49
【问题描述】:

我有以下 2 个收藏:

Products
 - name (String)
 - price (number)
 - category (ObjectID refs to Category collection)

Category
- name

我们有搜索查询,例如“一些查询”

我正在尝试获取 product.nameproduct.category.name 部分 包含搜索查询的记录

【问题讨论】:

标签: node.js mongodb express mongoose mongoose-schema


【解决方案1】:

如果你使用 Mongoose 填充,那使用 DBRef,这在服务器端并不容易使用。

如果 Products 文档仅包含对应 Category 文档的 _id,则需要使用聚合读取所有 Products 文档,并为每个文档加载所有对应 Category 文档,然后使用正则表达式进行过滤。

这是不可扩展的。

如果您通过使 Products 文档同时包含 Category 的 _id 和 name 来进行一些非规范化(假设 Category 实际上还有其他数据),您可以在 Products 集合上使用文本索引,或者如果您使用的是 Atlas, Products 集合中的全文搜索。

【讨论】:

  • 我认为最相关的解决方案是在产品集合中添加带有 _id 的类别名称,但文本索引仍然不能部分搜索
  • MongoDB 的文本搜索不进行子字符串匹配,它使用与语言相关的规则来匹配基本词。搜索“jumped”将匹配包含“jump”、“jumped”、“jumping”或“jumps”作为单独单词的字符串,但不会匹配“outjump”。如果您需要子字符串匹配,则需要使用正则表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多