微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

{{id:1,title:“ text”}}和{title:“ text”,id:1}之间的区别MongoDB索引

如何解决{{id:1,title:“ text”}}和{title:“ text”,id:1}之间的区别MongoDB索引

我正在设计一个架构,其中一个User文档存储着Skill id。 Skill文档看起来像这样

Skill = {
  id: ObjectId
  title: String
  description: String
}

User = {
  id: ObjectId
  skills: [ObjectId]
}

在前端,用户可以通过搜索标题添加Skill。因此,我通过{id: 1,title: "text"}对技能收集进行了索引。我想知道在将文本索引与数字索引结合在一起时排序是否重要。

解决方法

是的,这很重要。直接来自docs

复合索引中列出的字段的顺序很重要。索引将包含对文档的引用,这些文档首先按项目字段的值排序,然后在项目字段的每个值内,按库存字段的值排序。有关更多信息,请参见排序顺序。

在当前结构中,如果仅查询title字段而没有限制(无查询)的id字段,则将无法使用索引。

,

是的,这有很大的不同,documentation about composite text indexes

  • 如果复合文本索引在文本索引键之前包含键,则要执行$text搜索,查询谓词必须在前面的键上包含相等匹配条件。

这意味着如果您执行{id: 1,title: 'text'},并且您还将搜索限制在单个 id内,则只能在标题上使用文本索引。

如果您执行{title: 'text',id: 1},则可以单独对标题进行文本搜索,也可以对其进行进一步的id约束,或者为文本搜索结果检索匹配的id。

确定要在索引中使用id列吗?为什么不只是文本索引?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。