sql >> データベース >  >> NoSQL >> MongoDB

MongoDBBSONの逆シリアル化

    興味のある人のために、私は自分の問題の解決策を見つけました。 BSON形式は、GoogleのGSONドライバー を使用してJSONと同じように解析できることがわかりました。 私が対処しなければならなかった1つのトリッキーな部分は、ネストされたフィールドをテンプレートクラスに格納する方法を考え出すことでした。 GSONがネストされたドキュメントを解析できるようにする方法は、テンプレートクラスで静的内部クラスを宣言することです。次に例を示します:

    public BSONObject {
       // Private fields
       private int foo;
       private String bar;
    
      // Constructors
      public BSONObject() {}
    
      // Static inner subclasses
      private Widget widget;
      private Duck quack;
    
      // Getters & Setters for outer class
      public int getFoo() {...}
      public String getBar() {...}
      public Widget getWidget() {...}
      public Duck getDuck() {...}
    
      // Static inner class declarations
      public static Widget {
         // include vars & getters/setters
      }
    

    など

    上記のフレームワークに従ってテンプレートクラスを宣言することで、GSONライブラリの数行のコードを使用してMongoDBのフォーマットを簡単に解析できました。 MongoのBSON応答で各ドキュメントを区切るために、Webサービスからデータを返すときに各エントリに「\n」を連結したことに注意してください。

    public String getNestedField() {
       Gson gson = new Gson();
       String [] split = response.split("\n");
       JsonParser p = new JsonParser();
       String json = split[0];
       BSONObject b = gson.fromJson(p.parse(json), BSONObject.class);
       return b.getWidget().getField();
    }
    



    1. mgotime.Timeまたはbooleanチェック

    2. Redisクラスターシャーディングの概要–利点、制限、デプロイ、クライアント接続

    3. マングース-オブジェクトの配列内の値をインクリメントします

    4. MongoDBでインラインMap/Reduceを制限およびソートする