【问题标题】:How to insert/update a data frame into Mongodb based on condition如何根据条件将数据框插入/更新到 Mongodb
【发布时间】:2019-09-02 18:46:57
【问题描述】:

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

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

例如,

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

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

3) 如果我尝试在 DB 中不存在数据的地方插入数据框(第三个 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。

【问题讨论】:

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


    【解决方案1】:

    这是我理解的。试着告诉我。

    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)
    

    【讨论】:

    • 感谢您的回复!!不幸的是,这对我不起作用。我仍然有更新的问题。我可以知道你的 mongodb 版本吗?我使用 MongoDB 4.0.6。 insert_many 对我有用,但我仍然不确定 update/update_many。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-31
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2020-06-25
      • 2018-06-14
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      相关资源
      最近更新 更多