MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

पांडा के साथ mongoDB में नए फ़ील्ड (कॉलम) सम्मिलित करना

आपको जिस विधि की आवश्यकता है वह है update_one() upsert=True . के साथ एक लूप में; आप उपयोग नहीं कर सकते insert_many() दो कारणों से; सबसे पहले आप हमेशा सम्मिलित नहीं करते हैं; कभी-कभी आप अपडेट कर रहे होते हैं; दूसरा update_many() (और insert_many() ) केवल एक फिल्टर पर काम करें; आपके मामले में प्रत्येक फ़िल्टर अलग है क्योंकि प्रत्येक अपडेट एक अलग समय से संबंधित है।

यह सामान्य समाधान है जो डेटाफ़्रेम को संयोजित करेगा (df_a , df_b इस मामले में - आपके पास जितने चाहें उतने हो सकते हैं) जिस तरह से आपको चाहिए। यह itrows का उपयोग करता है डेटाफ़्रेम की प्रत्येक पंक्ति प्राप्त करने के लिए, दिनांक पर फ़िल्टर करें, और डेटाफ़्रेम में मानों को सेट करें। $set ऑपरेटर मानों को ओवरराइड कर देगा यदि वे पहले से मौजूद हैं और सेट नहीं होने पर उन्हें सेट कर देंगे। upsert=True अगर तारीख पर कोई मेल नहीं है तो एक इंसर्ट करेगा।

for df in [df_a, df_b]:
    for _, row in df.iterrows():
        db.mycollection.update_one({'date': row.get('date')}, {'$set': row.to_dict()}, upsert=True)

पूर्ण कार्य उदाहरण:

from pymongo import MongoClient
from pprint import pprint
import datetime
import pandas as pd

# Sample data setup

db = MongoClient()['mydatabase']

data_a = [[datetime.datetime(2017, 5, 19, 21, 20), 96, 8, 98],
          [datetime.datetime(2017, 5, 19, 21, 21), 95, 8, 97],
          [datetime.datetime(2017, 5, 19, 21, 22), 95, 8, 97]]

df_a = pd.DataFrame(data_a, columns=['date', 'std_500_1000window', 'std_50_100window', 'std_50_2000window'])

data_b = [[datetime.datetime(2017, 5, 19, 21, 20), 98, 9, 10],
          [datetime.datetime(2017, 5, 19, 21, 21), 98, 9, 10],
          [datetime.datetime(2017, 5, 19, 21, 22), 98, 9, 10]]

df_b = pd.DataFrame(data_b, columns=['date', 'std_50_3000window', 'std_50_300window', 'std_50_500window'])

# Perform the upserts

for df in [df_a, df_b]:
    for _, row in df.iterrows():
        db.mycollection.update_one({'date': row.get('date')}, {'$set': row.to_dict()}, upsert=True)

# Print the results

for record in db.mycollection.find():
    pprint(record)

परिणाम:

{'_id': ObjectId('5f0ae909df5531ac655ce528'),
 'date': datetime.datetime(2017, 5, 19, 21, 20),
 'std_500_1000window': 96,
 'std_50_100window': 8,
 'std_50_2000window': 98,
 'std_50_3000window': 98,
 'std_50_300window': 9,
 'std_50_500window': 10}
{'_id': ObjectId('5f0ae909df5531ac655ce52a'),
 'date': datetime.datetime(2017, 5, 19, 21, 21),
 'std_500_1000window': 95,
 'std_50_100window': 8,
 'std_50_2000window': 97,
 'std_50_3000window': 98,
 'std_50_300window': 9,
 'std_50_500window': 10}
{'_id': ObjectId('5f0ae909df5531ac655ce52c'),
 'date': datetime.datetime(2017, 5, 19, 21, 22),
 'std_500_1000window': 95,
 'std_50_100window': 8,
 'std_50_2000window': 97,
 'std_50_3000window': 98,
 'std_50_300window': 9,
 'std_50_500window': 10}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सोलर 4 में मोंगोडब डेटा कैसे आयात और अनुक्रमित करें?

  2. मोंगोडीबी में सबसे अधिक बार होने वाले मूल्य को खोजने का सबसे अच्छा तरीका क्या है?

  3. अगर मौजूद नहीं है तो मोंगोइंजिन के साथ अपडेट कैसे करें?

  4. MongoDB के बारे में

  5. ClusterControl रनटाइम कॉन्फ़िगरेशन विकल्प