【问题标题】:Mongodb indexing optional fieldsMongodb索引可选字段
【发布时间】:2015-01-27 21:10:44
【问题描述】:

我的 mongodb 集合中有一些字段是搜索的可选部分。如果我不知道用户可能正在查询哪些字段,我如何才能一致地索引此查询(即每个查询,无论参数如何都将使用索引)?

【问题讨论】:

  • 您唯一的选择是为每个可能的字段组合创建一个单独的索引。
  • @Philipp - 我对您如何处理字段可能不是查询的一部分的情况感到更加困惑。比如说,我正在创建一个查询杂货店营养数据的服务。如果我已为 gluenFree 字段编制索引,但用户不是无麸质且未将其添加到他/她的搜索中,我如何确保使用复合索引?
  • 当查询只提供索引的开头时,也可以使用复合索引。
  • 啊,所以如果我要添加一个不属于索引的附加查询,那么索引只会打折,如果我省略了部分索引,则不会打折?
  • 当你寻找比索引覆盖更多的字段时,它仍然有部分用途,因为它可以用来将需要扫描的候选文档限制为与索引匹配的那些。当您遗漏索引所涵盖的字段时,这些字段应该是索引的最后一个字段,因为缺少字段之后的任何字段都无法使用。

标签: mongodb indexing


【解决方案1】:

您可以使用Sparse Index

稀疏索引只包含具有 索引字段,即使索引字段包含空值。这 index 跳过任何缺少索引字段的文档。这 索引是“稀疏的”,因为它不包括一个 收藏。相比之下,非稀疏索引包含一个 集合,为那些不存在的文档存储空值 包含索引字段。

db.addresses.createIndex( { "xmpp_id": 1 }, { sparse: true } )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 2011-08-28
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多