how to define a compound and hashed mongodb index?
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
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 } )