[英]storing large data into mongodb collection using python
我正在研究 Django 項目,我必須創建 10 年的數據並將它們存儲在 MongoDB 中檢索它並將其顯示在 HTML 頁面上。 我試圖將 10 年的數據划分為 1 年,然后將其存儲在 MongoDB 集合中,但每當我嘗試這樣做時,只會存儲兩個文檔並且
此錯誤顯示在 pymongo 中。 errors.DocumentTooLarge:BSON 文檔太大(29948865 字節) - 連接的服務器支持 BSON 文檔大小高達 16793598 字節。
我的 python 代碼是
now=start
workdate=now.date()
nowtime=now.time()
endt=end
ktime=start
times=[]
states=[]
level=[]
#generating random level of water in the tank
while (now!=endt): # loop for creating data for given time
ktime=ktime+relativedelta(months=5)
print(current_level)
def fill():
global df
global now
global workdate
global nowtime
global ktime
global current_level
global flag
global times
global states
global level
while x=='on' and current_level<=450:
times.append(now)
states.append(x)
level.append(current_level)
current_level+=filling
current_level=round(current_level,2)
now=now+timedelta(minutes=1)
nowtime=now.time()
workdate=now.date
if now==ktime:
times.append(now)
states.append(x)
level.append(current_level)
print("true")
flag='red'
break
def drain():
global df
global now
global workdate
global nowtime
global ktime
global current_level
global flag
global times
global states
global level
while x=='off' and current_level>50:
times.append(now)
states.append(x)
level.append(current_level)
print(current_level)
current_level-=emptyrate
current_level=round(current_level,4)
now=now+timedelta(minutes=1)
nowtime=now.time()
workdate=now.date()
if now==ktime:
times.append(now)
states.append(x)
level.append(current_level)
print("true")
flag='red'
break
flag='green'
k=True
while k:
if x=='off' and current_level>50:
drain()
x='on'
if flag =='red':
break
if x=='on' and current_level<450:
fill()
x='off'
if flag=='red':
break
data = {'time': times, 'status': states, 'level': level}
df = pd.DataFrame(data)
df.reset_index(inplace=True)
data = df.to_dict('records')
colle.insert({"data":data}) #transfering data to collection
del df
data.clear()
所以問題出在我的邏輯上,而不是清除數據我應該在循環結束后清除時間、狀態和級別列表中已經存儲的數據,所以最后應該更改的部分如下
while k:
if x=='off' and current_level>50:
drain()
x='on'
if flag=='red':
data = {'time': times, 'status': states, 'level': level}
flag='green'
break
if x=='on' and current_level<450:
fill()
x='off'
if flag=='red':
data = {'time': times, 'status': states, 'level': level}
flag='green'
break
df = pd.DataFrame(data)
print(df)
df.reset_index(inplace=True)
data_dict = df.to_dict("records")
colle.insert_one({"DATA":data_dict})
df=df.iloc[0:0]
times.clear()
states.clear()
控制以下代碼運行時間的外循環或主循環保持不變
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.