如何根据条件将数据框插入/更新到Mongodb

时间:2019-04-12 03:50:12

标签: mongodb pandas dataframe pymongo pymongo-3.x

有人可以根据以下条件帮助将Dataframe更新为Mongo。

如果我有一个相似的日期,我想更新现有的值。如果我的日期不同,我想插入新文档。

例如,

1)考虑到我已将如下所示的第一个数据帧插入到Mongodb中。

2)当我尝试插入第二个数据框时,它应检查第二个DF中的日期是否已在数据库中退出。如果存在,则应使用新的年龄和新的计数来更新现有名称。

3)如果我尝试在数据库中不存在数据的地方插入数据框(第三个DF),则应该插入数据框。

第一个数据帧:

data_1 = {'date':['2019-04-10','2019-04-10','2019-04-10','2019-04-10'],'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[20, 21, 19, 18],'Count':[5, 2, 1, 8]}

第二个数据帧:

data_2 = {'date':['2019-04-10','2019-04-10','2019-04-10','2019-04-10'],'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[25, 21, 19, 16],'Count':[7, 3, 5, 8]}

第三数据框:

data_3 = {'date':['2019-04-11','2019-04-11','2019-04-11','2019-04-11'],'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[25, 21, 19, 16],'Count':[7, 3, 5, 8]}

在上面的示例中,db最终将具有第二个和第三个数据帧。

2 个答案:

答案 0 :(得分:0)

这是我所了解的。尝试让我知道。

from pymongo import MongoClient
client = MongoClient()

client = MongoClient('localhost', 27017)
client = MongoClient('mongodb://localhost:27017/')
db = client['test-database']
testData = db['test-data']
availableData = testData.find()

new_data = data_2
for obj in availableData:
    if obj['date'] == new_data['date']:
        testData.update(new_data)
        else:
            testData.insert(new_data)

答案 1 :(得分:0)

如果日期已存在,我通过删除集合来解决了我的问题。谢谢!

import pandas as pd
import pymongo
import datetime

df = pd.DataFrame({'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[20, 33, 20, 18]})
now = datetime.datetime.now()
now = now.strftime("%Y-%m-%d")
df.insert(0, 'Date', now)


#Making Mongo DB connections
conn = 'mongodb://localhost:27017'
client = pymongo.MongoClient(conn)

#Creating DB
db = client.sample_db

#Creating collections for the DB
test_collection = db.test.find()

#Inserting into DB
db.test_collection.delete_many({"Date": now})
db.test_collection.insert_many(df.to_dict("records"))