pymongo - 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 中听起来像是我需要的,但这只是从我读过的内容中插入文档的另一种方式。任何帮助将不胜感激。
解决方案
问题是我正在通过我的收藏获得我的收藏client.db_name.collection_name
,但它没有获得我用我的代码创建的相同收藏。client.db_name["collection-name"]
解决了我的问题。诡异的。
推荐阅读
- c - MAP_HUGETLB 未定义
- c++ - 调用 QML 处理程序,但使用“未定义”c++ 信号参数
- validation - ASP.NET CORE 3.1 中数据注释和错误验证消息的本地化
- python - 从另一列中减去日期时间。出现错误:-: 'str' 和 'str' 的操作数类型不受支持
- javascript - 从 eBay 中的 Find Items Advanced API 返回项目属性
- sql - 在 DISTINCT 查询之前在 SQL 中使用管道正则表达式
- ios - 尝试归档项目时出现 Xcode 错误:意外的重复任务
- python - 使用数据流模板读取大查询表
- list - 如何将列表的元素添加到哈希表?
- bash - 在 Bash 中匹配所有文件/目录名称(包括以点开头的名称)的最短表达式是什么?