Как мне проиндексировать два массива в MongoDB? - PullRequest
9 голосов
/ 29 июня 2011
db.hello.ensureIndex({"array1":1, "array2":1})

MongoDB не позволяет этого, потому что они говорят, что «это может выйти из-под контроля».Однако я знаю, что мои массивы никогда не будут превышать длину 3. Как я могу взломать MongoDB, чтобы разрешить индексирование нескольких массивов одновременно?

При использовании составного индекса самое большее одно из индексированных значений в любомДокумент может быть массивом.Поэтому, если у нас есть индекс для {a: 1, b: 1}, следующие документы в порядке:

{a: [1, 2], b: 1} {a: 1, b:[1, 2]} Однако этот документ вставить не удастся, с сообщением об ошибке «не удается индексировать параллельные массивы»:

{a: [1, 2], b: [1, 2]} Проблема с индексированием параллельных массивов заключается в том, что каждое значение в декартовом произведении составных ключей должно быть проиндексировано, что может очень быстро выйти из-под контроля.

1 Ответ

5 голосов
/ 29 июня 2011

Краткий ответ на ваш вопрос: ты не Единственный доступный вариант - хранить каждую уникальную пару в виде одного элемента массива. Так что вместо:

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

вы храните

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

Очевидно, что у этого есть несколько недостатков, так что это действительно зависит от вашего конкретного варианта использования, является ли это подходящим обходным решением. Однако я согласен с тем, что Монго не должен отклонять несколько индексов массива только для защиты от идиотов. Это хорошая функция для небольших / слабых кардинальных массивов.

...