java bsonobject_Java BSON使用

Java BSON使用

Java BSON 数据类型

目前,SequoiaDB 支持多种 BSON 数据类型。详情请查看数据模型 - 文档一节。

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 支持使用org.bson.types.BSONDecimal或者java.math.BigDecimal来生成高精度数。

// 方式一:使用BSONDecimal构造Decimal类型

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:{"$decimal":"12345.067891234567890123456789", "$precision":[100, 30]}}

BSONObject obj2 = new BasicBSONObject();

BSONDecimal decimal2 = new BSONDecimal(str, 100, 30);

obj2.put("b", decimal2);

// 方式二:使用BigDecimal构造Decimal类型

BSONObject obj3 = new BasicBSONObject();

obj3.put("c", new BigDecimal("1.2345")); // 注意:BigDecimal参数最终将转换为BSONDecimal,详情请查看API介绍。

字符串

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);

二进制

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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值