У меня проблемы с сохранением документов с помощью 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 звучит как то, что мне нужно, но это просто еще один способ вставить документы из того, что я прочитал. Любая помощь будет принята с благодарностью.