Установка отдельных битов в монго, для хранения битовой маски - PullRequest
3 голосов
/ 31 августа 2011

Я хочу сохранить некоторые флаги в Монго БД.На данный момент у меня есть следующее:

> db.test.save({a:0x1})
> db.test.save({a:0x3})
> db.test.save({a:0x2})
> db.test.save({a:0x2})
> db.test.save({a:0x4})
> db.test.save({a:0x5})
> db.test.find({'$where': "this.a & 0x1"})

Есть ли более эффективный способ?

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Хотя вы можете сделать это таким образом, я бы предложил использовать отдельные логические поля для каждого флага. Это займет больше места, но будет быстрее запрашивать, потому что он не будет использовать JavaScript и может использовать индексы при необходимости. Если вам нужны битовые поля для других частей вашего приложения, вы можете поддерживать их оба в актуальном состоянии, как показано ниже (при условии, что a, b, c ... отображаются в биты 0,1,2 ...):

db.c.update({_id:ID}, {$set:{a:true}, $bit:{bits: {or: 0x1}}})
db.c.update({_id:ID}, {$set:{c:false}, $bit:{bits: {and: ~0x8}}})
0 голосов
/ 21 декабря 2011

когда вы используете $ где: "this.myField & 0x1", оно совпадает с $ где: "0" и $ где: "1" и это неправильно, потому что 0 == false = true, но 0 === false = false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...