MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để sử dụng Python để chuyển bsondump của MongoDB thành JSON?

Những gì bạn có là một kết xuất trong Mongo Extended JSON ở chế độ TenGen (xem tại đây). Một số cách có thể thực hiện:

  1. Nếu bạn có thể kết xuất lại, hãy sử dụng chế độ xuất Nghiêm ngặt thông qua API MongoDB REST. Điều đó sẽ cung cấp cho bạn JSON thực thay vì những gì bạn có bây giờ.

  2. Sử dụng bson từ http://pypi.python.org/pypi/bson/ để đọc BSON mà bạn đã có trong cấu trúc dữ liệu Python và sau đó thực hiện bất kỳ quá trình xử lý nào bạn cần trên các cấu trúc đó (có thể xuất ra JSON).

  3. Sử dụng các liên kết MongoDB Python để kết nối với cơ sở dữ liệu để lấy dữ liệu sang Python, sau đó thực hiện bất kỳ quá trình xử lý nào bạn cần. (Nếu cần, bạn có thể thiết lập phiên bản MongoDB cục bộ và nhập các tệp đã kết xuất của bạn vào đó.)

  4. Chuyển đổi Mongo Extended JSON từ chế độ TenGen sang chế độ Nghiêm ngặt. Bạn có thể phát triển một bộ lọc riêng để làm điều đó (đọc từ stdin, thay thế cấu trúc TenGen bằng cấu trúc Nghiêm ngặt và xuất kết quả trên stdout) hoặc bạn có thể làm điều đó khi bạn xử lý đầu vào.

Đây là một ví dụ sử dụng Python và các biểu thức chính quy:

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

Tùy thuộc vào mục tiêu của bạn, một trong những mục tiêu này phải là điểm khởi đầu hợp lý.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose.js tạo nhiều kết nối đến MongoDB từ một lệnh gọi connect ()

  2. Làm cách nào để thực hiện truy vấn NOT IN trong Mongo?

  3. Nhận tên của tất cả các khóa trong bộ sưu tập

  4. MongoDB Hiển thị người dùng hiện tại

  5. Một bảng gian lận hiệu suất cho MongoDB