おはよう、
私はMongoDBにかなり慣れていないため、cドライバーを使用しているため、この質問は些細なことに思えるかもしれませんが、完全に途方に暮れています.
「フォルダー」と呼ばれる配列を持つドキュメントがあり、フォルダーの各要素内に「ファイル」というタイトルの二次配列があります。特定のフォルダーの配列の「ファイル」にエントリを追加したいと考えています。
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);