db.hello.ensureIndex({"array1":1, "array2":1})
MongoDB does not allow that, because they say “it can get out of hand”. However, I know that my arrays will never exceed length of 3. How can I hack MongoDB to allow indexing multiple arrays at once?
When using a compound index, at most
one of indexed values in any document
can be an array. So if we have an
index on {a: 1, b: 1}, the following
documents are both fine:{a: [1, 2], b: 1} {a: 1, b: [1, 2]}
This document, however, will fail to
be inserted, with an error message
“cannot index parallel arrays”:{a: [1, 2], b: [1, 2]} The problem
with indexing parallel arrays is that
each value in the cartesian product of
the compound keys would have to be
indexed, which can get out of hand
very quickly.
The short answer to your question is; you don’t. The only option available to you is to store the every unique pair as a single array element. So rather than :
you store
Obviously this has a few downsides so it really depends on your specific usecase whether or not this is an appropriate workaround. I do agree however that mongo shouldn’t reject multiple array indexes just for idiot proofing. It’s a good feature for small/low cardinality arrays.