Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to define a compound and hashed mongodb index?

I know that a compound index is defined like this:

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

and a hashed a simple index like this:

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

question is how to achieve both?

like image 235
ramon_salla Avatar asked Feb 01 '14 19:02

ramon_salla


2 Answers

According to the hashed index documentaion You can't!

MongoDB supports hashed indexes of any single field. The hashing function collapses sub-documents and computes the hash for the entire value, but does not support multi-key (i.e. arrays) indexes.

You may not create compound indexes that have hashed index fields

PS: The above is valid for versions 2.4 and 2.6 (which is the latest at the moment)

PS2: According to @naman's answer it is now possible in version 4.4

like image 147
xlembouras Avatar answered Oct 06 '22 05:10

xlembouras


If you want to achieve a compound hashed index, it's feasible with version 4.4 and above. From the documentation, you can now create it as:

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

for the particular example in question

db.products.ensureIndex( { "item": "hashed", "stock": 1 } )
like image 38
Naman Avatar answered Oct 06 '22 06:10

Naman