我正在用Python编写一些代码,并用Pymongo在mongoDB中存储数据。我想在数据结构中为每个时隙存储某些计数器:
{
"connip": "a",
"timeline": [
{
"timeslot": "1",
"counter": 1
},
{
"timeslot": "2",
"counter": 1
}
]
}
为了更新数据,我最初设法创建了正确工作的代码。主要问题是,为了更新数组,我必须检查数组是否存在,并且必须创建或更新特定条目:
ci="a"
ts="1"
cnt = 3
c = mlcol.count_documents({"connip": ci, "timeline.timeslot": ts})
if (c > 0):
mlcol.update_one({"connip": ci, "timeline.timeslot": ts}, {"$inc":{"timeline.$.counter":cnt}}, upsert=True)
else:
c = mlcol.count_documents({"connip": ci})
if (c > 0):
mlcol.update_one({"connip": ci}, {'$push': {"timeline": {"timeslot": ts,"counter":cnt}}})
else:
mlcol.insert_one({"connip": ci,"timeline":[{"timeslot": ts,"counter":cnt}]})
当我尝试编写代码来执行批量操作时,我有以下命令可以独立正常工作:
bulk=mlcol.initialize_unordered_bulk_op()
bulk.insert({"connip": ci,"timeline":[{"timeslot": ts,"counter":cnt}]})
bulk.find({"connip": ci}).upsert().update({'$push': {"timeline": {"timeslot": ts,"counter":cnt}}})
bulk.find({"connip": ci, "timeline.timeslot": ts}).upsert().update({"$inc":{"timeline.$.counter":cnt}})
res=bulk.execute()
使用大容量操作,我无法检查要运行的操作,因为在执行大容量操作之前,我无法检查数组是否存在
有没有一种方法可以在执行期间使此操作有条件
在单个命令中插入或更新数据的任何其他方式
如果没有阵列,满足需要的单个命令是:
bulk.find({"connip": conip}).upsert().update({"$inc":{ts:cnt}})
目前没有回答
相关问题 更多 >
编程相关推荐