Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB更新(如果更新)或插入(如果不存在)_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB更新(如果更新)或插入(如果不存在)

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

例如,如果我有一些传感器,它们有唯一的SN

然后,我有一些这样格式的历史数据(未排序):
(序列号、时间戳、值)

我想保持传感器在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}
,请参阅