Как вставить / обновить фрейм данных в Mongodb на основе условия - PullRequest
0 голосов
/ 12 апреля 2019

Может ли кто-нибудь помочь в обновлении 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 голосов
/ 20 апреля 2019

Я решил свою проблему, удалив коллекцию, если дата существует.Спасибо !!

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"))
0 голосов
/ 12 апреля 2019

Это то, что я понял. Попробуйте и дайте мне знать.

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)
...