【问题标题】:Does BSON support an array of anonymous objectsBSON 是否支持匿名对象数组
【发布时间】:2013-06-06 14:28:49
【问题描述】:

在网上搜索后,我无法弄清楚 BSON 是否支持匿名对象数组。我想要这个的原因是具有以下架构的日志记录系统

{
  ERROR_LOG: [
    {
      message: "There was an error recording the file",
      code: 1133
    },
    {
      message: "There was an error saving the file",
      code: 1135 
    }
  ],
  FILE_LOG: [
    {
      message: "File 1234.txt edited",
      code: 5445
    },
    {
      message: "File transfer success",
      code: 2332
    }
  ], 
  ... etc.
}

可能是这种架构设计效率不高。如果不支持匿名对象,我愿意接受不同模式的建议。

【问题讨论】:

  • 父文档的上下文是什么?老实说,听起来这些确实应该是单独的文件

标签: json mongodb schema bson


【解决方案1】:

确实如此。

在引擎盖下,文档将获得递增的名称“0”、“1”……但 bson 库会对您隐藏它。

您还可以混合数组中的元素的类型:

{
    array: [
        {
            message: "There was an error recording the file",
            code: 1133
        },
        1234,
        "etc."
    ]
}

编辑:

从这里的文档中抄袭:http://api.mongodb.org/c/current/tutorial.html#bson

我认为您应该能够执行以下操作:

bson doc[1];

bson_init( doc );
    bson_append_start_array( b, "ERROR_LOG" );
      bson_append_start_object( doc, "0" );
        bson_append_string( doc, "message", "There was an error recording the file" );
        bson_append_int( doc, "code", 1133 );
      bson_append_finish_object( doc );
      bson_append_start_object( doc, "1" );
        bson_append_string( doc, "message", "There was an error saving the file" );
        bson_append_int( doc, "code", 1135 );
      bson_append_finish_object( doc );
    bson_append_finish_array( b );
    bson_append_start_array( b, "FILE_LOG" );
      bson_append_start_object( doc, "1" );
        bson_append_string( doc, "message", "File 1234.txt edited" );
        bson_append_int( doc, "code", 5445 );
      bson_append_finish_object( doc );
      bson_append_start_object( doc, "1" );
        bson_append_string( doc, "message", "File transfer success" );
        bson_append_int( doc, "code", 2332 );
      bson_append_finish_object( doc );
    bson_append_finish_array( b );
bson_finish( doc );

请注意,C 驱动程序欺骗了我,您确实需要跟踪数组元素的“索引”名称。

【讨论】:

  • 编辑了答案以包含一个示例来创建您的示例文档...可能无法编译/工作,但我认为它应该有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
相关资源
最近更新 更多