我有一個我想更新的mongodb數據庫。其實,我的創建和更新數據庫代碼如下:從python更新mongodb數據庫
from pymongo import MongoClient
client = MongoClient()
client = MongoClient('localhost', 27017)
db = client['my_db_values']
res = collection = db['db_values']
res = collection.find({"User": "2145"})
if res.count() == 0:
json_file = {"User": "2145", "Item": {"123456": {"process1": [],"process2": []}}}
temp_json1 = {"timestamp": "2123532158", "process1_value": 0.4, "state": {"B": 0.1, "F": 0.2, "E": 0.3}}
temp_json2 = {"timestamp": "2323532158", "process2_value": 0.2, "P": 0.8}
json_file ["Item"][str(123464)]["process1"].append(temp_json1)
json_file ["Item"][str(123464)]["process2"].append(temp_json2)
temp = db.values
temp_id = temp.insert_one(json_file).inserted_id
else:
for line in res:
counter = 0
for key in line["Item"].keys():
if line["Item"].keys()[counter] == "123464":
collection.update_one({"User": "2145", "Item": {"123464": {"process1":[]}}}, {"$set": {"Item.123464.process2": [
{"timestamp": "21354879546213", "process1_value": 0,
"state": {"B": 0.1, "F": 0.2,
"E": 0.3}}], "Item.123464.process2": [
{"timestamp": "11354879546213", "process2_value": 0, "P": 0.8}]}})
else:
collection.update_one({"User": "2145"},{"$set": {"Item.123464.process1": [{"timestamp": "21354879546213", "process1_value": 0.4, "state": {"B": 0.1, "F": 0.2, "E": 0.3}}], "Item.123464.process2": [{"timestamp": "11354879546213", "process2_value": 0.2, "P": 0.8}]}})
counter = counter + 1
在第一,如果stetement如果算上它同樣是零,我創建與特定用戶的JSON文件,如果它已經同時那麼我需要爲Sla做同樣的事情,然後我需要用新的temp_json1和temp_json2來更新數據庫。如何將子文檔更新到我的初始文檔中。其實我想執行一個檢查,看看是否有一個具有特定ID的用戶(否則我想添加他),然後如果當前的item_id不存在添加項目在用戶文檔中(如我在我的代碼已經)。最後,如果該項目確實存在,那麼我只想在已創建的子文檔中添加temp_json1和temp_json2。我該怎麼做?
奧克大概我清楚。我最終想要的是,對於每個擁有不同密鑰的不同用戶來說,在頭文件「Item」中都有一個包含很多密鑰的文檔,我想在其中添加很多值。 –
要回答您發生這種情況的次數的問題,您可以對此查詢運行計數。 要更新子文檔,請嘗試閱讀本文:https://www.nodechef.com/docs/cloud-search/updates-documents-nested-in-arrays – chinnychinchin
我也可以插入子文檔嗎? –