当前位置:   article > 正文

mysql位运算与mongon位运算

mysql位运算与mongon位运算

用一个10进制数字,表示多种意义,一般都会遇到这种需求。
比如:会议室设备字段 A(int)用A字段表示会议室中是否有:1投影 2 八爪鱼 3 黑板
下面介绍用A字段进行标记三种意义

  • 二进制 001 表示投影 十进制为 1
  • 二进制 010 表示八爪鱼 十进制为 2
  • 二进制 100 表示 十进制为 4

下面罗列出所有选项

二进制十进制含义
0011投影
0113八爪鱼+投影
1004黑板
0102八爪鱼
1015黑板+投影
1106黑板+八爪鱼
1117黑板+八爪鱼+投影

1 理解后看下mysql操作

查询A字段是否有投影
select  * from table where 1 = A & 1
查询A字段是否有八爪鱼
select  * from table where 2 = A & 2
查询A字段是否有黑板
select  * from table where 4 = A & 4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

mysql 位与运算符 ( & ) :对应的二进制位都为 1 ,则该位的运算结果为 1 ,否则为 0
SELECT 1&1,2&1,3&1,4&1,5&1,6&1,7&1 二进制如下
001 010 011 100 101 110 111
001 001 001 001 001 001 001
|-----|-----|-----|-----|-----|-----|-----|
 001 000 001 000 001 000 001
上下运算结果 位数都为1则返回1
所以大家看出来了。我们选的代表值1,2,4必须是2的倍数100 010 001所以在查询的时候只有一个1

下面是更新
位或运算符 ( | ) :对应的二进制位有一个或两个为 1 ,则该位的运算结果为 1 ,否则为 0

更新字段A中有八爪鱼
update table where A=A|2
更新字段A中有黑板
update table where A=A|4
  • 1
  • 2
  • 3
  • 4

2 下面是mongon的运算操作

原数据

$bitsAllSet 转换二进制对比固定位置为1
Bit Value	1	1	1	1	1	1	1	0Position	7	6	5	4	3	2	1	0

查询有投影(返回二进制从右往左  第0位为1的数据)
db.bittest.find({ a: { $bitsAllSet: [0] } } ) 
查询有八爪鱼(返回二进制从右往左  第1位为1的数据)
db.bittest.find({ a: { $bitsAllSet: [1] } } ) 
查看投影和八爪鱼都有的数据
db.bittest.find({ a: { $bitsAllSet: [01] } } ) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

更新与mysql相似
0011
0100
|------|
0111

更新字段中有投影
db.bittest.update(
   { _id: 2 },
   { $bit: { a: { or: NumberInt(1) } } }
)
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/978947
推荐阅读
相关标签
  

闽ICP备14008679号