Java BSON使用

    Java 构造 BSON 数据类型

    • 整数/浮点数

    • 高精度数

      1. String str = "12345.067891234567890123456789";
      2. BSONObject obj = new BasicBSONObject();
      3. BSONDecimal decimal = new BSONDecimal(str);
      4. obj.put("a", decimal);
      5. Java BSON 构造一个最多有100位有效数字,其中小数部分最多有30位的Decimal类型// {b:{"$decimal":"12345.067891234567890123456789", "$precision":[100, 30]}}
      6. BSONObject obj2 = new BasicBSONObject();
      7. BSONDecimal decimal2 = new BSONDecimal(str, 100, 30);
      8. obj2.put("b", decimal2);
    • 字符串

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

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

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

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

      1. BSONObject obj = new BasicBSONObject();
      2. ObjectId id1 = new ObjectId();
      3. ObjectId id2 = new ObjectId("53bb5667c5d061d6f579d0bb");
      4. obj.put("_id", id1);
    • 正则表达式

      Java BSON 使用 java.util.regex.Pattern 来构造正则表达式数据类型。

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

    • 日期

      Java BSON 使用 java.util.Date 来构造日期类型。

      1. BSONObject obj = new BasicBSONObject();
      2. Date now = new Date();
      3. obj.put("date", now);

      Note:

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

    • 二进制

      Java BSON 使用 org.bson.types.Binary 来构造二进制类型。

    • 时间戳

      1. String mydate = "2014-07-01 12:30:30.124232";
      2. String dateStr = mydate.substring(0, mydate.lastIndexOf('.'));
      3. String incStr = mydate.substring(mydate.lastIndexOf('.') + 1);
      4. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      5. Date date = format.parse(dateStr);
      6. int seconds = (int)(date.getTime()/1000);
      7. int inc = Integer.parseInt(incStr);
      8. BSONTimestamp ts = new BSONTimestamp(seconds, inc);
      9. BSONObject obj = new BasicBSONObject();
      10. obj.put("timestamp", ts);