2

C ライブラリを使用して、巨大な多次元 (100x100) 整数/倍精度/浮動小数点フィールドを BSON オブジェクトに追加するにはどうすればよいですか?

私が見る最も近い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 に答える