3

mongo c ドライバーを使用して、単一のドキュメント内のネストされた配列を更新しようとしています。テスト ドキュメントの例を次に示します。

{ 
  "_id" : ObjectId("562416504bacd3940b8b2d5c"), 
  "folder1" : [
    {
      "folder_id" : "5624200d4bacd3940b8b2d62", 
      "some" : "data"
    }, 
    {
      "folder_id" : "562940084bacf60575d3b17e", 
      "some" : "data"
    }
  ], 
  "folder2" : [
    {
      "folder_id" : "5627e20d4bacefccf4864e4e", 
      "some" : "data"
    }
  ]
}

両方を反復処理して、特定の文字列 (例: ) に一致するもの"folder1""folder2"探します。次に、その要素全体を配列から削除したいと思います。したがって、削除後、ドキュメントは次のようになります。"folder_id"5624200d4bacd3940b8b2d62

{ 
  "_id" : ObjectId("562416504bacd3940b8b2d5c"), 
  "folder1" : [
    {
      "folder_id" : "562940084bacf60575d3b17e", 
      "some" : "data"
    }
  ], 
  "folder2" : [
    {
      "folder_id" : "5627e20d4bacefccf4864e4e", 
      "some" : "data"
    }
  ]
}

以下の例のように、ドキュメント内の 1 つの要素を変更する方法を知っています。しかし、ネストされた配列要素を繰り返し処理する良い例は見つかりませんでした。

update = BCON_NEW ("$set", "{","some_cool_key", BCON_UTF8 ("some cool data for key"),"}");
mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);
4

1 に答える 1

1

これを手伝ってくれた John Moore @ ObjectRocket の功績を称えたいと思います。彼は、まさに私が必要としている単純な 1 行の BCON を提供してくれました。

update = BCON_NEW ("$pull", "{", "folder1", "{", "folder_id", BCON_UTF8 ("5624200d4bacd3940b8b2d62"), "}", "}");
于 2015-11-08T01:08:25.777 に答える