在mongo中设置各个位,以存储位掩码

时间:2011-08-31 13:49:06

标签: mongodb bit-manipulation

我想将一些标志存储到mongodb中。现在我有以下内容:

> 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 个答案:

答案 0 :(得分:2)

虽然你可以这样做,但我建议为每个标志使用单独的布尔字段。这将占用更多空间,但查询速度会更快,因为它不会使用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}}})

答案 1 :(得分:0)

当你使用$ where:“this.myField& 0x1”时它与$ where相同:“0”和$ where:“1” 这是错误的,因为0 == false = true,但是0 === false = false