MongoDB更新(如果更新)或插入(如果不存在)
例如,如果我有一些传感器,它们有唯一的SN 然后,我有一些这样格式的历史数据(未排序):MongoDB更新(如果更新)或插入(如果不存在),mongodb,mongodb-query,Mongodb,Mongodb Query,例如,如果我有一些传感器,它们有唯一的SN 然后,我有一些这样格式的历史数据(未排序):(序列号、时间戳、值) 我想保持传感器在MongoDB中的最新状态{sn:xxx,“时间戳”:xxx,“值”:xxx,“安装时间”:xxx}。安装时间可能会在以后手动添加 所以现在,我的代码是 if db.sensors.find_one({"sn":SN, "timestamp": {"$lt": timestamp}}): db.sensors.update_one({"sn":SN}, {"$s
(序列号、时间戳、值)
我想保持传感器在MongoDB中的最新状态<代码>{sn:xxx,“时间戳”:xxx,“值”:xxx,“安装时间”:xxx}。安装时间可能会在以后手动添加
所以现在,我的代码是
if db.sensors.find_one({"sn":SN, "timestamp": {"$lt": timestamp}}):
db.sensors.update_one({"sn":SN}, {"$set":{"timestamp": timestamp, "value": value}}, {"upsert": True})
我想知道我是否可以把这些合并到一个操作中
我试着做条件插入
db.sensors.update_one({“sn”:sn,“timestamp”:{“$lt”:timestamp},{“$set”:{“timestamp”:timestamp,“value”:value},{“upsert”:True})
。问题是我将有多个具有相同序列号的文档
例如,让我们从空集合开始。首先,处理(1,3,1)
,插入{“sn”:1,“timestamp”:3,“value”:1}
。然后,处理(1,1,2)
,它将创建另一个文档{“sn”:1,“timestamp”:1,“value”:2}
。预期的行为就是忽略这个数据点
我还尝试进行文档替换
db.sensors.update_one({“sn”:sn,“timestamp”:{“$lt”:timestamp}},{“sn”:sn,“timestamp”:timestamp,“value”:value},{“upsert”:True})
。这将覆盖其他一些字段,如installed\u time
您可以发布一些示例文档吗?@Yogesh您指的是哪一部分?历史数据来自,比如说多个不同的csv文件,带有SN、timestamp、VALUE列。我认为您的文档似乎包含相同时间戳的相同SN值。因此,您得到了多个具有相同SN的文档。您是否检查了@Yogesh No。具有相同SN的多个文档是因为数据未排序。如果我有文档{“sn”:1,“timestamp”:3,“value”:1}
,然后处理(1,1,2)
,它将创建另一个文档{“sn”:1,“timestamp”:1,“value”:2}
,请参阅