Mongo C 驱动程序:将元素插入嵌套数组
Mongo C-Driver: Insert element into nested array
早上好,
我对 MongoDB 和使用 c-driver 很陌生,所以这个问题对某些人来说似乎微不足道,但我完全不知所措。
我有一个文档,其中有一个名为 'folders' 的数组,在文件夹的每个元素中都有一个名为 'files' 的辅助数组。我想在 'files' 中为特定文件夹的数组添加一个条目。
我曾尝试在 c 中使用 $push 创建 BCON,但我知道我完全搞砸了。我没有遇到编译错误,我可以 运行 应用程序,但文档没有任何反应。我认为我的应用程序在这段代码的时候中止了,因为它后面有一个 printf 无法打印,但是如果我从代码中删除 'update = ' 和 'mongoc_collection_update' 行,一切都会正确执行。所以我认为我的问题是实际的 bcon 结构是错误的并导致 exec 出错。
示例文档
{
"_id" : ObjectId("5627e20d4bacefccf4864e4e"),
"allow_save" : "true",
"allow_add" : "true",
"auto_approve_invites" : "true",
"folders" : [
{
"folder_id" : "root",
"display_name" : "My Folder",
"files" : [
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
},
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
},
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
}
]
},
{
"folder_id" : "1",
"display_name" : "My Other Folder",
"preview_thumbnail" : "58656607-801b-40e4-aa34-e01ef1def85b",
"files" : [
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
},
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
},
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
}
]
}
]
}
代码示例
collection = mongoc_client_get_collection (client, "***", "***");
update = bson_new ();
bson_oid_t oid;
bson_oid_init_from_string (&oid, tribe_id);
update = BCON_NEW ("_id", BCON_OID(&oid));
// Find the document
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
// add new file
update = BCON_NEW ("$push",
"{","folders.folder_id", BCON_UTF8 ("root"), "}",
"{","new_file", "new value", "}");
mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);
update = BCON_NEW ("$push", "{", "folders.0.files", "{", "file", BCON_UTF8 ("XXXXXXXXX"), "modified", BCON_UTF8 (""), "}", "}");
已找到解决方案。
早上好,
我对 MongoDB 和使用 c-driver 很陌生,所以这个问题对某些人来说似乎微不足道,但我完全不知所措。
我有一个文档,其中有一个名为 'folders' 的数组,在文件夹的每个元素中都有一个名为 'files' 的辅助数组。我想在 'files' 中为特定文件夹的数组添加一个条目。
我曾尝试在 c 中使用 $push 创建 BCON,但我知道我完全搞砸了。我没有遇到编译错误,我可以 运行 应用程序,但文档没有任何反应。我认为我的应用程序在这段代码的时候中止了,因为它后面有一个 printf 无法打印,但是如果我从代码中删除 'update = ' 和 'mongoc_collection_update' 行,一切都会正确执行。所以我认为我的问题是实际的 bcon 结构是错误的并导致 exec 出错。
示例文档
{
"_id" : ObjectId("5627e20d4bacefccf4864e4e"),
"allow_save" : "true",
"allow_add" : "true",
"auto_approve_invites" : "true",
"folders" : [
{
"folder_id" : "root",
"display_name" : "My Folder",
"files" : [
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
},
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
},
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
}
]
},
{
"folder_id" : "1",
"display_name" : "My Other Folder",
"preview_thumbnail" : "58656607-801b-40e4-aa34-e01ef1def85b",
"files" : [
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
},
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
},
{
"modified" : "",
"file" : "58656607-801b-40e4-aa34-e01ef1def85b"
}
]
}
]
}
代码示例
collection = mongoc_client_get_collection (client, "***", "***");
update = bson_new ();
bson_oid_t oid;
bson_oid_init_from_string (&oid, tribe_id);
update = BCON_NEW ("_id", BCON_OID(&oid));
// Find the document
cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);
// add new file
update = BCON_NEW ("$push",
"{","folders.folder_id", BCON_UTF8 ("root"), "}",
"{","new_file", "new value", "}");
mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);
update = BCON_NEW ("$push", "{", "folders.0.files", "{", "file", BCON_UTF8 ("XXXXXXXXX"), "modified", BCON_UTF8 (""), "}", "}");
已找到解决方案。