Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何定义复合和散列mongodb索引?_Mongodb_Mongodb Indexes - Fatal编程技术网

如何定义复合和散列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年后,你现在可以了。