如何根据条件 insert/update 将数据框 Mongodb
How to insert/update a data frame into Mongodb based on condition
有人可以根据以下条件帮助将 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最终会有第二个和第三个Data Frames。
这是我的理解。试试让我知道。
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)
如果日期存在,我已通过删除集合解决了我的问题。谢谢!!
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"))
有人可以根据以下条件帮助将 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最终会有第二个和第三个Data Frames。
这是我的理解。试试让我知道。
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)
如果日期存在,我已通过删除集合解决了我的问题。谢谢!!
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"))