首页 > 解决方案 > pymongo中的insert_many没有持久化

问题描述

我在使用 .pymongo 保存文档时遇到了一些问题insert_many

我正在将一个 dicts 列表移交给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"})

当我打开另一个 python REPL 并开始查看client.material.master_data集合时,collection.find_one({"MATERIAL": "000000000000000001"})或者collection.count_documents({})我得到 Nonefind_one和 0 count_documents

是否有一个步骤我需要调用一些方法来将数据保存到磁盘?db.collection.save()在 mongo 客户端 API 中听起来像是我需要的,但这只是从我读过的内容中插入文档的另一种方式。任何帮助将不胜感激。

标签: pymongo

解决方案


问题是我正在通过我的收藏获得我的收藏client.db_name.collection_name,但它没有获得我用我的代码创建的相同收藏。client.db_name["collection-name"]解决了我的问题。诡异的。


推荐阅读