【问题标题】:how to define a compound and hashed mongodb index?如何定义复合和哈希 mongodb 索引?
【发布时间】:2023-03-22 15:00:01
【问题描述】:

我知道复合索引是这样定义的:

db.products.ensureIndex( { "item": 1, "stock": 1 } )

和一个像这样的简单索引:

db.active.ensureIndex( { item: "hashed" } )

问题是如何实现两者?

【问题讨论】:

标签: mongodb mongodb-indexes


【解决方案1】:

根据hashed index documentaion你不能!

MongoDB 支持任何单个字段的哈希索引。散列 函数折叠子文档并计算整个散列 值,但不支持多键(即数组)索引。

您可能创建具有散列索引字段的复合索引

PS:以上对2.4和2.6版本有效(目前是最新版本)

PS2:根据@naman 的answer,现在可以在 4.4 版中使用

【讨论】:

  • 多键索引与复合索引不同。在示例中,item 和 stock 不是数组。
  • 我知道,我没有说相反的。最后它说您不能创建具有散列索引字段的复合索引,并且您只能创建单个字段的复合索引,这回答了您的要求。如果您绝对需要这两个字段的哈希索引,请将它们作为子文档作为单个字段,根据文档,它可以工作。
  • 好吧,我的意图是按照你最后说的,组合两个字段然后计算哈希,而不是对单个字段进行哈希然后组合它(因为显然不允许文件说)。我只是想有一种方法可以散列自动组合的字段。但正如你所说,我需要创建一个新字段并对其进行哈希处理。
  • 您可以在jira.mongodb.org/browse/SERVER-10220 上为将来版本中包含的此功能投票
  • 显然,7 年后,您现在可以do this with compatibility version 4.4
【解决方案2】:

MongoDB 4.4 支持单哈希的复合索引,可以像这样创建

db.collection.createIndex( { "colA" : 1, "fieldB" : "hashed" } )

注意:确保 featureCompatibilityVersion 设置为 4.4,以便您可以创建复合哈希索引。

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

【讨论】:

  • 感谢您的贡献,这里的赏金是draw attention to this answer,您所做的答案最终会成为重复的。因此,建议关闭它以支持其他答案。
【解决方案3】:

如果要实现复合哈希索引,4.4及以上版本是可行的。从documentation,您现在可以将其创建为:

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
db.collection.createIndex( { "fieldA" : 1, "fieldB" : "hashed", "fieldC" : -1 } )

对于有问题的特定示例

db.products.ensureIndex( { "item": "hashed", "stock": 1 } )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2016-12-15
    • 2013-02-08
    • 2013-12-05
    • 2019-01-28
    • 2018-03-09
    相关资源
    最近更新 更多