MongoDB如果更新则更新,如果不存在则更新

时间:2016-11-22 04:49:48

标签: mongodb mongodb-query

例如,如果我有一些传感器并且它们具有唯一的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

0 个答案:

没有答案