MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak mogę użyć Pythona do przekształcenia bsondump MongoDB w JSON?

Masz zrzut w Mongo Extended JSON w trybie TenGen (zobacz tutaj). Kilka możliwych dróg:

  1. Jeśli możesz ponownie wykonać zrzut, użyj ścisłego trybu wyjściowego za pośrednictwem interfejsu API MongoDB REST. To powinno dać ci prawdziwy JSON zamiast tego, co masz teraz.

  2. Użyj bson z http://pypi.python.org/pypi/bson/, aby odczytać BSON, który już masz, w strukturach danych Pythona, a następnie wykonać na nich dowolne przetwarzanie (prawdopodobnie wyprowadzając JSON).

  3. Użyj powiązań MongoDB Python, aby połączyć się z bazą danych, aby pobrać dane do Pythona, a następnie wykonaj dowolne przetwarzanie. (W razie potrzeby możesz skonfigurować lokalną instancję MongoDB i zaimportować do niej zrzucone pliki).

  4. Konwertuj Mongo Extended JSON z trybu TenGen na tryb ścisły. Możesz opracować osobny filtr, aby to zrobić (odczyt z stdin, zastąp struktury TenGen strukturami ścisłymi i wypisz wynik na stdout) lub możesz to zrobić podczas przetwarzania danych wejściowych.

Oto przykład użycia Pythona i wyrażeń regularnych:

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

W zależności od celu, jeden z nich powinien być rozsądnym punktem wyjścia.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak używać Node.js do nawiązywania połączenia tunelowego SSH z bazą danych MongoDB?

  2. Klucze dynamiczne po $grupuj według

  3. db.collection nie jest funkcją podczas korzystania z MongoClient v3.0

  4. MongoDB atomowe findOrCreate:findOne, wstaw, jeśli nie istnieje, ale nie aktualizuj

  5. Jak prawidłowo ponownie wykorzystać połączenie z Mongodb w aplikacjach i modułach NodeJs?