我应该如何在bson对象中插入一个巨大的int / double数组?

时间:2012-11-28 21:29:50

标签: c mongodb bson

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

我看到的最接近的stackoverflow问题/答案是针对C ++(MongoDB: how do I store binary array in a BSON in C++?

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

我并不反对转换到C ++,但如果它是实用的,我宁愿坚持使用C驱动程序。

谢谢!

2 个答案:

答案 0 :(得分: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)客户端读取二进制文件。感谢那些帮助过的人!

答案 1 :(得分:0)

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

bson_append_binary() API doc

所以代码看起来像是:

int[100][100] bigArray;
bson_append_binary(bsonHandle, "yourFieldName", BSON_BIN_BINARY, bigArray, sizeof(bigArray));
相关问题