如何定义复合索引和哈希索引mongodb?

6

我知道复合索引的定义如下:

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

可以使用哈希对简单的索引进行加密,如下所示:

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

问题是如何同时实现两者?

1
显然,7年后,你现在可以使用兼容版本4.4 进行此操作 - Naman
3个回答

5
根据哈希索引文档,你不能这样做!MongoDB支持任何单个字段的哈希索引。哈希函数会折叠子文档并计算整个值的哈希,但不支持多键(即数组)索引。您不能创建具有哈希索引字段的复合索引。PS:以上内容适用于2.4和2.6版本(目前最新版本)。PS2:根据@naman的答案,在4.4版本中现在是可能的。

多键索引与复合索引不同。在此示例中,item和stock不是数组。 - ramon_salla
2
我知道,我并没有说相反的话。最后它说您可能无法创建具有哈希索引字段的复合索引,并且只能创建单个字段的复合索引,这回答了您的问题。 如果您绝对需要这两个字段的哈希索引,请将它们作为子文档合并为一个字段,根据文档,这样可以实现。 - xlembouras
我的意图是按照你最后说的那样,将两个字段组合起来然后计算哈希值,而不是先对单个字段进行哈希,然后再组合起来(因为文档明确说明这是不允许的)。我只是以为有一种方法可以对自动组合的字段进行哈希。但正如你所说的,我需要创建一个新字段并对其进行哈希。 - ramon_salla
您可以在将来的版本中投票是否包含此功能,网址为:https://jira.mongodb.org/browse/SERVER-10220。 - Nic Cottrell
显然,7年后,你现在可以使用兼容版本4.4 进行此操作 - Naman
好的!早就该了。 - xlembouras

2
如果您想实现复合哈希索引,MongoDB 4.4及以上版本是可行的。根据文档,您现在可以创建如下所示的索引:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
db.collection.createIndex( { "fieldA" : 1, "fieldB" : "hashed", "fieldC" : -1 } )

针对特定的例子

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

0

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

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

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

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


感谢您的贡献,此处的赏金是为了引起对此答案的关注,您提供的答案可能会成为重复答案。因此,建议关闭您的答案,支持其他答案。 - Naman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接