在MongoDB新C驱动程序中更新数组

时间:2014-08-14 07:55:53

标签: c mongodb mongodb-c

直到上个月,我使用的是Legacy C Driver,但从上周开始我转向了新的C驱动程序,它看起来非常好用且易于使用。我在DB中保存了一个文件,其中包含3个字符串,2个整数和2个数组。现在我想更新这个数组。我这样想,

update_mod = BCON_NEW ("$set", "{",
                           "Int1", BCON_INT32 (23),
                           "Int2",BCON_INT32(34),
                           "String1",BCON_UTF8("String1"),
                           "String2", BCON_UTF8("String2"),
                           "String3",BCON_UTF8("String3"),
                           "Array1", BCON_ARRAY(&Array1),
                           "Array2", BCON_ARRAY(&Array2),
                       "}");
            }

但是它没有用,如果我尝试在没有Array的情况下更新它,那么它的工作正常。 任何人都可以告诉我如何做到这一点。并且我还希望在每次更新时在Array中保存多个值。

2 个答案:

答案 0 :(得分:1)

BCON_ARRAY使用args列表作为输入,而不是指向数组的指针。你应该使用类似的东西:

BCON_ARRAY(Array1 [0],Array1 [1],...);

答案 1 :(得分:0)

您可以将 bson_t 类型的变量传递给 BCON_ARRAY。因此,首先您将从数组中创建一个 BCON_DOCUMENT,然后您可以将该文档作为输入传递给 BCON_ARRAY;类似于以下内容:

bson_error_t error;
bson_t *bson_array_doc = bson_new_from_json((const uint8_t *)my_array_str, -1, &error);
bson_t *bson_doc = BCON_NEW("$set", "{", "my_array", BCON_ARRAY(bson_array_doc), "}");