我有看起来像这样的文件:
{
"_id" : ObjectId("5768e43"),
"APPID" : {
"Number" : 0,
},
sessions : [{
id : 111111,
"setOID" : {
"Number" : 0
},
"custID" : {
"Number" : 0
},
}, {
id : 133333,
"setOID" : {
"Number" : 2
},
"custID" : {
"Number" : 2
},
}, {
id : 7777,
"setOID" : {
"Number" : 2
},
"custID" : {
"Number" : 2
},
},
]
}
我喜欢获取其 id == 133333 (位于 [1] 中)的会话元素,并能够使用新值对其进行更新并向其添加新元素,因此它看起来像这样:
{
id : 133333,
"setOID" : {
"Number" : 3333
},
"custID" : {
"Number" : 4444
},
new_attr_1 : 0
new_attr_2 : 2
},
当涉及到 C 驱动程序时,文档很难理解,有人可以展示一下最好的方法吗?
更新
我尝试使用 cdriver 版本 1.4(最新)并且奇怪的事情发生了更新失败(返回 true)但文档中没有更新
bson_t *query2 = BCON_NEW ("sessions.id ", BCON_INT32 (133333));
bson_t *update;
update = BCON_NEW ("$set", "{","Sessions.$.new_attr_1" ,BCON_INT32 (0) ,"}");
if (!mongoc_collection_update (collection,MONGOC_UPDATE_NONE, query2, update, NULL, &error)) {
fprintf (stderr, "%s\n", error.message);
goto fail;
}
所以当你看到发生了很多奇怪的事情时,我如何检查更新是否真的成功?