我有一个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
在第一个if语句中,如果count等于零,我将使用该特定用户创建json文件,而如果它已经存在,那么我需要对Sla执行相同的操作,然后我需要使用新的temp_json1和temp_json2更新db。如何将子文档更新为初始文档。实际上,我想执行一个检查,看看db中是否有一个具有特定id的用户(否则我想添加他),然后如果当前item\u id不存在,则在用户文档中添加该项(就像我在代码中已经做的那样)。最后,如果该项确实存在,那么我只想在已经创建的子文档中添加temp\ujson1和temp\ujson2。我怎么能这么做?你知道吗
您需要的是子文档查询(通过嵌套内容查询文档)。你知道吗
您可以使用
$elemMatch
特性来控制此查询,以指定与您的Item
子文档的123456
子文档的process1
数组的内容匹配的内容。你知道吗查询的Mongo Shell格式如下(对于python驱动程序,只需使用查询部分):
因此,如果您的集合中填充了以下两个文档:
此查询将只返回第二个文档,但会忽略第一个文档,因为其process1数组内容不包含“12345”。你知道吗
希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐