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

Mongodb có thể kết xuất nhưng không thể lưu trữ khôi phục lỗi từ chèn quá lớn

Giải pháp của tôi là mở tệp BSON (bằng python) theo cách thủ công, tìm các tài liệu lớn và xóa một số phần của nó, sau đó ghi đối tượng BSON vào tệp BSON mới và tải tệp BSON đã chỉnh sửa, tệp này đã được lưu trữ thành công vào mongo.

Điều này không đáp ứng được mong muốn của tôi là có thể tải db đã kết xuất vào hệ thống mà không cần thay đổi nó!

Python3:

import bson
from pprint import pprint

def get_bson_data(filename):
    with open(filename, "rb") as f:
        data = bson.decode_all(f.read())

    return data


def report_problematics_documents(data):
    problematics = []

    for item in data:
        if is_too_big(item):
            print(item)input("give me some more...")
            input("give me some more...")
            problematics.append(item)

    print(f"data len: {len(data)}")
    print(f"problematics: {problematics}")
    print(f"problematics len: {len(problematics)}")
        

def shrink_data(data):
    for i,  item in enumerate(data):
        if is_too_big(item):
            data[i] = shrink_item(item) # or delete it...
            print(f"item shrinked: {i}")


def write_bson_file(data, filename):
    new_filename = filename
    with open(new_filename, "wb") as f:
        for event in data:
            bson_data = bson.BSON.encode(event)
            f.write(bson_data)

def is_too_big(item):
    # you need to implement this one...
    pass


def shrink_item(item):
    # you need to implement this one...
    pass


def main():
    bson_file_name = "/path/to/file.bson"
    data = get_bson_data(bson_file_name)
    report_problematics_documents(data)

    shrink_data(data)
    report_problematics_documents(data)

    new_filename = bson_file_name + ".new"
    write_bson_file(data, new_filename)
    
    print("Load new data")
    data = get_bson_data(new_filename)
    report_problematics_documents(data)

if __name__ == '__main__':
    main()



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $ pull nhiều đối tượng trong Mongo không hoạt động

  2. Có chạy mongoskin chỉ với mongodb phiên bản 1.4 trở lên không?

  3. Nhập tài liệu vào MongoDB từ một mảng tài liệu JSON

  4. Cập nhật đối tượng lồng nhau trong mongoose

  5. Cách tiếp tục chèn sau lỗi trùng lặp khóa bằng PyMongo