sql >> Databáze >  >> NoSQL >> MongoDB

Jak mohu použít Python k transformaci bsondump MongoDB na JSON?

To, co máte, je výpis v Mongo Extended JSON v režimu TenGen (viz zde). Některé možné způsoby:

  1. Pokud můžete výpis znovu, použijte přísný výstupní režim prostřednictvím rozhraní MongoDB REST API. To by vám mělo poskytnout skutečný JSON místo toho, co máte nyní.

  2. Použijte bson z http://pypi.python.org/pypi/bson/ načíst BSON, který již máte, do datových struktur Pythonu a poté na nich provést jakékoli zpracování, které potřebujete (případně výstup JSON).

  3. Pomocí vazeb MongoDB Python se připojte k databázi, abyste získali data do Pythonu, a poté proveďte jakékoli zpracování, které potřebujete. (V případě potřeby můžete nastavit místní instanci MongoDB a importovat do ní uložené soubory.)

  4. Převeďte Mongo Extended JSON z režimu TenGen do režimu Strict. K tomu můžete vyvinout samostatný filtr (číst ze stdin, nahradit struktury TenGen strukturami Strict a výsledek vytisknout na stdout) nebo to můžete udělat při zpracování vstupu.

Zde je příklad použití Pythonu a regulárních výrazů:

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))

V závislosti na vašem cíli by jeden z nich měl být rozumným výchozím bodem.



  1. Pokud je redis již součástí zásobníku, proč se Memcached stále používá spolu s Redis?

  2. Provozní faktory, které je třeba vzít v úvahu při modelování dat MongoDB

  3. Importujte data CSV jako pole v MongoDB pomocí mongoimport

  4. Aktualizujte pole s více podmínkami v mongodb