0

問題が発生していますが、修正方法がわかりません。あなたが提供できるどんな助けも素晴らしいでしょう、私はそれが私が間違っている愚かなことだと確信しています. :)

「subscribed_tribes」というタイトルの配列にいくつかのアイテムを $push しようとしています。プッシュ前の私のドキュメントは次のとおりです。

{ 
"_id" : ObjectId("5693fc1f6890f14daa0e26e1"), 
"password" : "7CAE......", 
"salt" : "748D...", 
"created" : ISODate("2016-01-11T19:01:51.000+0000"), 
"display_name" : "2686....", 
"my_tribes" : "", 
"subscribed_tribes" : ""
}

次の c コードを実行しても何も起こりません (変更なし)。

        collection = mongoc_client_get_collection (client, "STribe", "users");

        query = bson_new ();
        bson_oid_t oid;
        char *techSupportID = "5693c0196890f159c1741bb1";
        bson_oid_init_from_string (&oid, techSupportID);
        query = BCON_NEW ("_id", BCON_OID(&oid));

        // Find the document
        cursor = mongoc_collection_find (collection, MONGOC_QUERY_NONE, 0, 0, 0, query, NULL, NULL);

        update = bson_new ();
        //BSON_APPEND_UTF8 (update, "testing", "blah");
        //mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);


        // Assemble query
        update = BCON_NEW ("$push", 
            "{", 
                "subscribed_tribes", 
                    "{", 
                        "tribe_id",     BCON_UTF8 (tribe_id), 
                        "tribe_key",  BCON_UTF8 (passphrase), 
                    "}", 
            "}");
        mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);

コードの 2 行 (bson_append と mongc_collection_update) のコメントを外すと、ドキュメント全体が上書きされ、次のように置き換えられます。

{ 
"_id" : ObjectId("5693c0196890f159c1741bb1"), 
"testing" : "blah", 
"subscribed_tribes" : [
    {
        "tribe_id" : "5624200d4bacd3940b8b2d62", 
        "tribe_key" : "27D719EDC7A59...."
    }
]
}

元のコードが配列項目をsubscribed_tribesに正しく追加しない理由はありますか? 次に、コメントを外した行を含めるとドキュメント全体が上書きされるのはなぜですか?

繰り返しますが、私は何かばかげたことをしていると確信していますが、何をしているのかわかりません。

4

1 に答える 1

0

subscribed_tribes現在、配列ではなく文字列です。そのため、その上で使用することはできません$push

入力された結果を調べると、errorそれに関するエラー メッセージが表示されるはずです。

したがって、ドキュメントを機能させるには、次のようにする必要があります$push

{ 
"_id" : ObjectId("5693fc1f6890f14daa0e26e1"), 
"password" : "7CAE......", 
"salt" : "748D...", 
"created" : ISODate("2016-01-11T19:01:51.000+0000"), 
"display_name" : "2686....", 
"my_tribes" : "", 
"subscribed_tribes" : []
}
于 2016-01-11T20:14:41.137 に答える