0

おはよう、

私は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);
4

1 に答える 1