insert_many в pymongo не сохраняется - PullRequest
0 голосов
/ 10 июля 2019

У меня проблемы с сохранением документов с помощью pymongo при использовании insert_many.

Я передаю список диктов на insert_many, и он отлично работает из того же скрипта, который выполняет вставку. Меньше, как только сценарий завершится.

def row_to_doc(row):
    rowdict = row.to_dict()
    for key in rowdict:
        val = rowdict[key]
        if type(val) == float or type(val) == np.float64:
            if np.isnan(val):
                # If we want a SQL style document collection
                rowdict[key] = None
                # If we want a NoSQL style document collection
                # del rowdict[key]
    return rowdict

def dataframe_to_collection(df):
    n = len(df)
    doc_list = []
    for k in range(n):
        doc_list.append(row_to_doc(df.iloc[k]))
    return doc_list

def get_mongodb_client(host="localhost", port=27017):
    return MongoClient(host, port)

def create_collection(client):
    db = client["material"]
    return db["master-data"]

def add_docs_to_mongo(collection, doc_list):
    collection.insert_many(doc_list)

def main():
    client = get_mongodb_client()
    csv_fname = "some_csv_fname.csv"
    df = get_clean_csv(csv_fname)
    doc_list = dataframe_to_collection(df)

    collection = create_collection(client)
    add_docs_to_mongo(collection, doc_list)

    test_doc = collection.find_one({"MATERIAL": "000000000000000001"})

Когда я открываю еще один REPL для Python и начинаю просматривать коллекцию client.material.master_data с collection.find_one({"MATERIAL": "000000000000000001"}) или collection.count_documents({}), я получаю None для find_one и 0 для count_documents.

Есть ли шаг, когда мне нужно вызвать какой-нибудь метод для сохранения данных на диске? db.collection.save() в API клиента mongo звучит как то, что мне нужно, но это просто еще один способ вставить документы из того, что я прочитал. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 10 июля 2019

Проблема заключалась в том, что я получал свою коллекцию через client.db_name.collection_name, а она не получала ту же коллекцию, которую я создавал с помощью своего кода.client.db_name["collection-name"] решил мою проблему.Weird.

...