C BSON使用

    与普通的 JSON 不同,BSON 提供更多的数据类型,以满足 C/C++ 语言多种多样的需求。SequoiaDB 提供了包括8字节浮点数(DOUBLE),字符串,嵌套对象,嵌套数组,对象 ID(数据库中每个集合中每条记录都有一个唯一 ID),布尔值,日期,NULL,正则表达式,4字节整数(INT),时间戳,以及8字节整数等数据类型。这些类型的定义可以在 bson.h 中的 bson_type 找到。详情请查看 C BSON API

    注意:使用 C BSON API 函数构建 BSON 出错时,API 将返回错误码表示构建失败。用户应当适当检测函数返回值。

    在用户程序使用 BSON 对象时,主要分为建立对象和读取对象两个操作。

    总的来说,一个 BSON 对象的创建主要分为三大步操作:

    2)使用对象

    3)清除对象(bson_dispose(与bson_create配对使用) ; bson_destroy(与bson_init配对使用))

    • 创建一个简单的 BSON 对象{age:20}。

    • 创建一个复杂的 BSON 对象

      1. bson *newobj = bson_create ();
      2. bson_append_string ( newobj, "name", "tom" );
      3. bson_append_start_array( newobj, "colors" );
      4. bson_append_string( newobj, "0", "red" );
      5. bson_append_string( newobj, "1", "blue" );
      6. bson_append_string( newobj, "2", "green" );
      7. bson_append_finish_array( newobj );
      8. bson_append_start_object ( newobj, "address" );
      9. bson_append_string ( newobj, "city", "Toronto" );
      10. bson_append_string ( newobj, "province", "Ontario" );
      11. bson_append_finish_object ( newobj );
      12. if( BSON_OK != bson_finish ( newobj ) )
      13. {
      14. printf( "Error." );
      15. }
      16. else
      17. {
      18. bson_print( newobj );
      19. }
      20. // never use "bson_destroy" here,
      21. // for "bson_dispose" is used with
      22. // "bson_create"
      23. bson_dispose( newobj );

    读取对象

    • 遍历每个连续的 BSON 对象元素,可以使用 bson_find 函数直接跳转得到元素的名称。如果该元素不存在于 bson 之内,则 bson_find 函数返回 BSON_EOO。

      例如想得到 name 元素名可以这样使用:

    • 读取数组元素或嵌套对象,因为“address”是一个嵌套对象,需要特殊遍历。首先得到 address 值,再初始化一个新的 BSON 迭代器:

      1. bson newobj;
      2. bson_iterator i;
      3. bson_iterator sub;
      4. bson_type type;
      5. const CHAR *value = NULL;
      6. bson_init( &newobj );
      7. bson_append_start_object( &newobj, "address" );
      8. bson_append_string( &newobj, "Home", "guangzhou" );
      9. bson_append_string( &newobj, "WorkPlace", "shenzhen" );
      10. bson_append_finish_object( &newobj );
      11. bson_finish( &newobj );
      12. // init bson iterator and display contents in the sub object
      13. type = bson_find( &i, &newobj, "address" );
      14. if ( BSON_EOO != type )
      15. {
      16. bson_iterator_subiterator( &i, &sub );
      17. while ( bson_iterator_more( &sub ) )
      18. {
      19. type = bson_iterator_next( &sub );
      20. key = bson_iterator_key( &sub );
      21. value = bson_iterator_string( &sub ) ;
      22. if ( BSON_STRING == type )
      23. {
      24. printf( "Type: %d, Key: %s, value: %s\n", type, key, value );
      25. }
      26. }
      27. }
      28. // release resource
      29. bson_destroy( &newobj );