例如,如果我有一些传感器并且它们具有唯一的SN。
然后,我有一些这种格式的历史数据(未排序):(SN, timestamp, value)
我想在MongoDB中维护传感器的最新状态。 {"sn":xxx, "timestamp": xxx, "value": xxx, "installed_time": xxx}
。安装时间可能会在以后手动添加。
目前,我的代码就像
if db.sensors.find_one({"sn":SN, "timestamp": {"$lt": timestamp}}):
db.sensors.update_one({"sn":SN}, {"$set":{"timestamp": timestamp, "value": value}}, {"upsert": True})
我想知道我是否可以将这些结合到一个操作中。
我尝试做有条件的upsert
db.sensors.update_one({"sn":SN, "timestamp": {"$lt": timestamp}}, {"$set":{"timestamp": timestamp, "value": value}}, {"upsert": True})
。问题是我将拥有多个具有相同SN的文档。
例如,让我们从空集合开始。首先,处理(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_time
。