如何定义复合和散列mongodb索引?
我知道复合索引的定义如下:如何定义复合和散列mongodb索引?,mongodb,mongodb-indexes,Mongodb,Mongodb Indexes,我知道复合索引的定义如下: db.products.ensureIndex( { "item": 1, "stock": 1 } ) db.active.ensureIndex( { item: "hashed" } ) 然后散列一个简单的索引,如下所示: db.products.ensureIndex( { "item": 1, "stock": 1 } ) db.active.ensureIndex( { item: "hashed" } ) 问题是如何实现这两个目标?根据“你不能!
db.products.ensureIndex( { "item": 1, "stock": 1 } )
db.active.ensureIndex( { item: "hashed" } )
然后散列一个简单的索引,如下所示:
db.products.ensureIndex( { "item": 1, "stock": 1 } )
db.active.ensureIndex( { item: "hashed" } )
问题是如何实现这两个目标?根据“你不能!”
MongoDB支持任何单个字段的散列索引。散列
函数折叠子文档并计算整个文档的哈希值
值,但不支持多键(即数组)索引
您可以不创建具有散列索引字段的复合索引
注:以上内容适用于2.4和2.6版本(目前最新版本)
PS2:根据@naman的说法,如果你想实现一个复合散列索引,那么在4.4版和更高版本中是可行的。从中,您现在可以将其创建为:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
db.collection.createIndex( { "fieldA" : 1, "fieldB" : "hashed", "fieldC" : -1 } )
对于所讨论的特定示例
db.products.ensureIndex( { "item": "hashed", "stock": 1 } )
MongoDB 4.4支持单散列的复合索引,可以像
db.collection.createIndex({“colA”:1,“fieldB”:“hashed”})
注意:确保featureCompatibilityVersion设置为4.4,以便创建复合哈希索引
db.adminCommand({setFeatureCompatibilityVersion:“4.4”})
多键索引与复合索引不同。在这个例子中,item和stock不是数组。我知道,我没有说oposite。最后,它说,您不能创建包含散列索引字段的复合索引,只能创建单个字段的复合索引,这符合您的要求。如果您确实需要这两个字段的散列索引,请将它们作为子文档的单个字段,根据文档,这是有效的。好的,我的意图是按照您最后所说的,组合这两个字段,然后计算散列,而不是散列单个字段,然后再组合它(正如文档所说,这显然是不允许的)。我只是想有一种方法可以散列自动合成的字段。但正如你所说,我需要创建一个新字段并对其进行散列。你可以在以下位置对该功能是否包含在未来版本中进行投票:显然,7年后,你现在就可以了。感谢你的贡献,这里的悬赏是为了,你所做的答案将是重复的。因此,我建议用另一个答案来结束它。显然,7年后,你现在可以了。