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

Pythonを使用してMongoDBのbsondumpをJSONに変換するにはどうすればよいですか?

    持っているのは、TenGenモードのMongo拡張JSONでのダンプです(ここを参照)。いくつかの可能な方法:

    1. 再度ダンプできる場合は、MongoDBRESTAPIを介して厳密な出力モードを使用してください。これにより、現在のJSONではなく実際のJSONが得られるはずです。

    2. bsonを使用する http://pypi.python.org/pypi/bson/から、既に持っているBSONをPythonデータ構造に読み込み、それらに対して必要な処理を実行します(JSONを出力する可能性があります)。

    3. MongoDB Pythonバインディングを使用してデータベースに接続し、データをPythonに取り込み、必要な処理を実行します。 (必要に応じて、ローカルのMongoDBインスタンスをセットアップし、ダンプされたファイルをそのインスタンスにインポートできます。)

    4. Mongo拡張JSONをTenGenモードからStrictモードに変換します。それを行うために別のフィルターを開発するか(stdinから読み取り、TenGen構造をStrict構造に置き換え、結果をstdoutに出力する)、または入力を処理するときにそれを行うことができます。

    Pythonと正規表現を使用した例を次に示します。

    import json, re
    from bson import json_util
    
    with open("data.tengenjson", "rb") as f:
        # read the entire input; in a real application,
        # you would want to read a chunk at a time
        bsondata = f.read()
    
        # convert the TenGen JSON to Strict JSON
        # here, I just convert the ObjectId and Date structures,
        # but it's easy to extend to cover all structures listed at
        # http://www.mongodb.org/display/DOCS/Mongo+Extended+JSON
        jsondata = re.sub(r'ObjectId\s*\(\s*\"(\S+)\"\s*\)',
                          r'{"$oid": "\1"}',
                          bsondata)
        jsondata = re.sub(r'Date\s*\(\s*(\S+)\s*\)',
                          r'{"$date": \1}',
                          jsondata)
    
        # now we can parse this as JSON, and use MongoDB's object_hook
        # function to get rich Python data structures inside a dictionary
        data = json.loads(jsondata, object_hook=json_util.object_hook)
    
        # just print the output for demonstration, along with the type
        print(data)
        print(type(data))
    
        # serialise to JSON and print
        print(json_util.dumps(data))
    

    目標に応じて、これらのいずれかが妥当な出発点になるはずです。



    1. mongo-java-driverのみを使用してMongoDBネイティブクエリ(JSON)を実行するにはどうすればよいですか?

    2. MongoDBのローカルタイムゾーンで日付でグループ化

    3. bluebirdを使用してMongoDBネイティブJavascriptドライバーを約束するにはどうすればよいですか?

    4. 使用可能なすべてのキーを取得するためのRedisコマンド?