2013-11-26 1 views
4

мне нужно сделать запрос, как это в MongoDB:Использование операции побитовое для запроса в MongoDB

db.collection.find({ $where : "(this.type & some_num)^some_num == 0"}) 

Some_num является переменной и может быть любым целым числом.

Я прочитал документ по адресу here, в котором говорится, что запрос Javascript замедляет выполнение, а также не может использовать индекс и требует сканирования таблицы.

Какая альтернатива вышеуказанному запросу?

+0

Что именно вы пытаетесь сделать с этим запросом? –

ответ

0

Мне трудно понять, чего именно вы пытаетесь достичь с помощью этого запроса. Construct this.type недействителен в JS, поэтому я предполагаю, что вы пытаетесь получить тип поля из вашего текущего документа. Затем по какой-то причине вы делаете побитовое значение & с некоторой переменной. И затем, наконец, вы xoring результат с той же переменной.

Либо я интерпретирую это неправильно, либо вы делаете что-то действительно странное.

В любом случае, вы сможете использовать bitwise xor operator in mognodb 2.6 или можете попробовать экспериментальную версию 2.5 сейчас.

+0

На самом деле, я не мог использовать побитовый оператор для запроса. [побитовый оператор xor в mognodb 2.6] (http://docs.mongodb.org/master/reference/operator/update/bit/#up._S_bit) позволяет использовать побитовую операцию только для обновления. –

+0

Это именно тот ответ, который я вам дал. Он будет доступен только в версии 2.6. Нет другого способа сделать это в версии 2.4. –

1

Лучшее, что нужно сделать в Монго, это сохранить рассчитанное значение, которое вы планируете искать в поле, а затем создать на нем индекс. В противном случае вы в значительной степени обречены на сканирование всей коллекции.

1

$ где должно быть медленно.

Было бы лучше что-то вроде $ bitand, но оно еще не реализовано. см. https://jira.mongodb.org/browse/SERVER-3518.

Возможное решение (для меня) использовало массивы.