如何定义复合和哈希 mongodb 索引?
Posted
技术标签:
【中文标题】如何定义复合和哈希 mongodb 索引?【英文标题】:how to define a compound and hashed mongodb index? 【发布时间】:2014-02-25 10:55:09 【问题描述】:我知道复合索引是这样定义的:
db.products.ensureIndex( "item": 1, "stock": 1 )
和一个像这样的简单索引:
db.active.ensureIndex( item: "hashed" )
问题是如何实现两者?
【问题讨论】:
显然,7 年后,您现在可以do this with compatibility version 4.4。 【参考方案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 )
【讨论】:
以上是关于如何定义复合和哈希 mongodb 索引?的主要内容,如果未能解决你的问题,请参考以下文章