2

我应该如何使用 C 库向 BSON 对象添加一个巨大的多维 (100x100) 整数/双精度/浮点字段?

我看到的最接近的 stackoverflow 问题/答案是针对 C++(MongoDB:如何在 C++ 中的 BSON 中存储二进制数组?

我在想也许我应该使用 bson_append_binary?我不太确定我会怎么做……我应该承认我的 C 很弱。我会写下我认为可以将 double[] 转换为二进制的方式,但我真的不知道如何。

我不反对切换到 C++,但如果可行,我更愿意坚持使用 C 驱动程序。

谢谢!

4

2 回答 2

1

我,和回答的人是对的,是bson_append_binary

正在做,

int array[] = {10,11,12};
int *array_ptr = array;
...
bson_append_binary(&b, "fld", BSON_BIN_USER, (char*)array_ptr, sizeof(array));
...

然后,我能够从 mongo 中读取数组:

...
if ( bson_find( iterator, mongo_cursor_bson( cursor ), "fld" )) {
    array_ptr = (int*)bson_iterator_bin_data(iterator);
    printf(" first element: %i\n", *(array_ptr++));
    printf("second element: %i\n", *(array_ptr++));
    printf(" third element: %i\n", *array_ptr);
}
...

看起来很简单,但因为我的 C 很糟糕,我花了好几个小时。下一个挑战是弄清楚如何从另一个(例如 PHP)客户端读取二进制文件。感谢帮助过的人!

于 2012-11-29T14:19:57.057 回答
0

看起来您会使用 bson_append_binary() 函数调用:

bson_append_binary() API 文档

所以代码看起来像:

int[100][100] bigArray;
bson_append_binary(bsonHandle, "yourFieldName", BSON_BIN_BINARY, bigArray, sizeof(bigArray));
于 2012-11-29T03:44:42.883 回答