Java BSON使用

数据类型概述

SequoiaDB 所支持的值类型见下表:

值类型 定义 比较优先级权值 用例
整数 整数 范围:-2147483648 至 2147483647 10 { "key" : 123 }
长整数 整数 范围:-9223372036854775808 至 9223372036854775807 如果用户指定的数值无法适用于整数,则 SequoiaDB 自动将其转化为浮点型 10 { "key" : 3000000000 } 或{ "key" : { "$numberLong" : "3000000000" } }
浮点数 浮点数 范围:-1.7E+308 至 1.7E+308 10 { "key" : 123.456 } 或 { "key" : 123e+50 }
高精度数 高精度数 范围:小数点前最高 131072 位,小数点后最高 16383 位 请参考 高精度数 10 { "key" : { $decimal:"123.456" } }
字符串 双引号包含的字符串 15 { "key" : "value" }
对象 ID(OID) 十二字节对象 ID请参考 对象 ID 35 { "key" : { "$oid" : "123abcd00ef12358902300ef" } }
布尔 true 或者 false 40 { "key" : true } 或 { "key" : false }
日期 YYYY-MM-DD 的日期形式范围:0000-01-01 至 9999-12-31请参考 日期 45 { "key" : { "$date" : "2012-01-01" } }
时间戳 YYYY-MM-DD-HH.mm.ss.ffffff 的时间戳形式范围:1902-01-01-00.00.00.000000 至 2037-12-31-23.59.59.999999 请参考 时间戳 45 { "key" : { "$timestamp" : "2012-01-01-13.14.26.124233" } }
二进制数据 Base64 形式的二进制数据 请参考 二进制数据 30 { "key" : { "$binary" : "aGVsbG8gd29ybGQ=", "$type" : "1" } }
正则表达式 正则表达式 请参考 正则表达式 50 { "key" : { "$regex" : "^张", "$options" : "i" } }
对象 嵌套 JSON 文档对象 20 { "key" : { "subobj" : "value" } }
数组 嵌套数组对象 请参考 数组 25 { "key" : [ "abc", 0, "def" ] }
null 5 { "key" : null }
最小值 比所有值小 -1 { "key" : {"$minKey": 1 } }
最大值 比所有值大 127 { "key" : {"$maxKey": 1 } }

Note:
不同类型字段的值进行比较时,比较优先级权值越大,该类型的值就越大。

Java 构造 BSON 数据类型
  • 整数/浮点数
    Java BSON 构造整数/浮点数类型// {a:123, b:3.14}
    BSONObject obj = new BasicBSONObject(); obj.put("a", 123); obj.put("b", 3.14); // or BSONObject obj2 = new BasicBSONObject().append("a", 123).append("b", 3.14); // or BSONObject obj3 = (BasicBSONObject) JSON.parse("{\"a\":123, \"b\":3.14}");

  • 高精度数
    Java BSON 构造不带精度要求的Decimal类型// {a:{"$decimal":“12345.067891234567890123456789”}}

String str = "12345.067891234567890123456789"; BSONObject obj = new BasicBSONObject(); BSONDecimal decimal = new BSONDecimal(str); obj.put("a", decimal);

Java BSON 构造一个最多有100位有效数字,其中小数部分最多有30位的Decimal类型// {b:{“ d e c i m a l " : " 12345.067891234567890123456789 " , " decimal":"12345.067891234567890123456789", " precision”:[100, 30]}}

BSONObject obj2 = new BasicBSONObject(); BSONDecimal decimal2 = new BSONDecimal(str, 100, 30); obj2.put("b", decimal2);

  • 字符串
    Java BSON 构造字符串类型// {a:“hi”}
    BSONObject obj = new BasicBSONObject(); obj.put("a", "hi");

  • 空类型
    Java BSON 构造空类型// {a:null}
    BSONObject obj = new BasicBSONObject(); obj.put("a", null);

  • 对象
    Java BSON 构造嵌套对象类型// {b:{a:1}}
    BSONObject subObj = new BasicBSONObject(); subObj.put("a", 1); BSONObject obj = new BasicBSONObject(); obj.put("b", subObj);

  • 数组
    Java BSON 使用 org.bson.types.BasicBSONList 来构造数组类型// {a:[0,1,2]}
    BSONObject obj = new BasicBSONObject(); BSONObject arr = new BasicBSONList(); arr.put("0", 0); arr.put("1", 1); arr.put("2", 2); obj.put("a", arr);

  • 布尔
    Java BSON 构造布尔类型// {a:true, b:false}
    BSONObject obj = new BasicBSONObject(); obj.put("a", true); obj.put("b", false);

  • 对象 ID
    Java BSON 使用 org.bson.types.ObjectId 来生成每条记录的“_id”字段内容。Java BSON 12 字节的 ObjectId 与 数据类型一节介绍的对象 ID 略有不同,目前,Java ObjectId 的 12字节内容由三部分组成:4字节精确到秒的时间戳,4字节系统(物理机)标示,4字节由随机数起始的序列号。默认情况下,数据库为每条记录生成一个字段名为“_id”的唯一对象 ID。
    BSONObject obj = new BasicBSONObject(); ObjectId id1 = new ObjectId(); ObjectId id2 = new ObjectId("53bb5667c5d061d6f579d0bb"); obj.put("_id", id1);

  • 正则表达式
    Java BSON 使用 java.util.regex.Pattern 来构造正则表达式数据类型。
    BSONObject matcher = new BasicBSONObject(); Pattern obj = Pattern.compile("^2001",Pattern.CASE_INSENSITIVE); matcher.put("serial_num", obj); BSONObject modifier = new BasicBSONObject("$set", new BasicBSONObject("count",1000)); cl.update(matcher, modifier, null);

以上使用正则表达式构造了一个匹配条件,将序列号以“2001”开头的记录的“count”字段内容改为“1000”。

Note:
以上使用 Patten 构造的 bson matcher,当使用 matcher.toString(),内容为:
{ "serial_num" : { "$options" : "i" , "$regex" : "^2001"}}
通过以下 bson 构造方式也可以得到相同的内容:
BSONObject matcher2 = new BasicBSONObject(); BSONObject obj2 = new BasicBSONObject(); obj2.put("$regex","^2001"); obj2.put("$options","i"); matcher2.put("serial_num", obj2);
但是,通过后者构造出的 matcher2 的数据类型是一个普通的对象嵌套类型,而不是正则表达式类型。

  • 日期
    Java BSON 使用 java.util.Date 来构造日期类型。
    BSONObject obj = new BasicBSONObject(); Date now = new Date(); obj.put("date", now);

Note:
sequoiadb 对应的日期只精确到年月日,而在 java 中日期类型 java.util.Date 的精度包含了时分秒,所以 java 驱动在处理 java.util.Date 类型时只会截取其年月日对应的数据传给引擎端。

  • 二进制
    Java BSON 使用 org.bson.types.Binary 来构造二进制类型。
    BSONObject obj = new BasicBSONObject(); String str = "hello world"; byte[] arr = str.getBytes(); Binary bindata = new Binary(arr); obj.put("bindata", bindata);
  • 时间戳
    Java BSON 使用 org.bson.types.BSONTimestamp 来构造时间戳类型。
    String mydate = "2014-07-01 12:30:30.124232"; String dateStr = mydate.substring(0, mydate.lastIndexOf('.')); String incStr = mydate.substring(mydate.lastIndexOf('.') + 1); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = format.parse(dateStr); int seconds = (int)(date.getTime()/1000); int inc = Integer.parseInt(incStr); BSONTimestamp ts = new BSONTimestamp(seconds, inc); BSONObject obj = new BasicBSONObject(); obj.put("timestamp", ts);
发布了99 篇原创文章 · 获赞 185 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/Bluechalk/article/details/103957838