How do I index two arrays in MongoDB?

老子叫甜甜 提交于 2020-08-22 04:28:47

问题


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.


回答1:


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 :

{a:[1,2], b:[8,9]}

you store

{ab:[[1,8], [1,9], [2,8], [2,9]]}

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.



来源:https://stackoverflow.com/questions/6516725/how-do-i-index-two-arrays-in-mongodb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!