MongoDB字段类型及转换

  1. 字段类型判断
    db.tb_name.find({"status":{$type:"double"}).count() //所有的status字段类型为Double类型的
    db.tb_name.find({"status":{$type:1}).count() //所有status字段类型为Double类型的
    以上两种方式均可以表示筛选Double类型的,在MongoDB中所有的字段值均为BSON类型实例,由于MongoDB的字段类型约束灵活,可以通过类型符号或别名进行筛选处理。
TypeNumberAliasNotes
Double1“double”
String2“string”
Object3“object”
Array4“array”
Binary data5“binData”
Undefined6“undefined”Deprecated.
ObjectId7“objectId”
Boolean8“bool”
Date9“date”
Null10“null”
Regular Expression11“regex”
DBPointer12“dbPointer”Deprecated.
JavaScript13“javascript”
Symbol14“symbol”Deprecated.
JavaScript (with scope)15“javascriptWithScope”
32-bit integer16“int”
Timestamp17“timestamp”
64-bit integer18“long”
Decimal12819“decimal” New in version 3.4.
Min key-1“minKey”
Max key127“maxKey”
  1. 字段类型处理
    场景:将某个状态值进行位运算($bit)修改订单状态,此时发现会偶发报错 "Cannot apply $bit to a value of non-integral type._id: ObjectId('5987f81ba693c552e3eaa088') has the field status of non-integer type double",即正常应该为int,但在shell控制台设置int类型的数字时应使用NumberInt(10),否则会被作为Double类型存储
  • 数据类型批量转换:db.tb_name.find({"status":{$type:1}}).forEach(function(x){x.status=NumberInt(x.status);db.tb_name.save(x)})
  1. $bit 位运算的使用
  • db.tb_name.update({"_id" : ObjectId("5987f81ba693c552e3eaa088")},{$bit:{"status":{or:NumberInt(19)}}})

参考链接

    原文作者:04939480fe17
    原文地址: https://www.jianshu.com/p/1e409f70fe4c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞