Страницы

четверг, 13 августа 2015 г.

MongoDB bitwise query operators

В MongoDB уже довольно давно существует оператор по имени $bit для выполнения битовых операций and | or | xor. И вот, как говорится не прошло и года, а на самом деле спустя четыре года, в версии 3.1.6 появилась возможность выполнять запросы по битовой маске. Я ждал эту фичу, предлагаю затестить:



Что это было:
- db.t.insert({a: NumberInt(5)}) - создаем документ, (5).toString(2) === "101"
db.t.find({a: {$bitsAllSet: [0, 2]}}) - получили документ (можно {$bitsAllSet: 5}, но с массивом нагляднее)
db.t.find({a: {$bitsAllSet: [0, 1, 2]}}) - не получили документ (можно {$bitsAllSet: 7})
db.t.update( {_id: ObjectId("55cc636b9cbff3677c3100db")}, {$bit: {a: {or: NumberInt(2)}}} ) - поменяли целевой бит
-  db.t.find({a: {$bitsAllSet: [0, 1, 2]}}) - бинго

Остальные операторы тестим самостоятельно.