MongoDB使用复合唯一索引

时间:2015-07-23 13:10:39

标签: javascript mongodb

我在保存新文件时试图拒绝重复。

我的文件如下:

{ "STATION_ID" : "KLFI",
  "TimeAsDate" : 1437656400000, 
  "TIME" : "231500Z", 
  "MYVISIBILITY" : 9600, 
  "SKYCONDITIONS" : { "1" : { "cloud_base_ft_amsl" : 5009.8424,
                              "cloud_base_ft_agl" : "5000", 
                              "sky_cover" : 3 },
                      "2" : 0, 
                      "3" : 0 
                     },
  "LATITUDE" : 37.07, 
  "LONGITUDE" : -76.37, 
  "_id" : ObjectId("55b0e0df80e44b30365e41de"), 
  "__v" : 0 
}

在导入新文档时,可能会有一些重复,所以我想要拒绝所有具有相同STATION_ID和TIME(仅在同一文档中)的文档。 如果STATION_ID相同且TIME不同,我想保留它。

我相信我可以使用复合唯一索引这样做:

db.meteo.createIndex({TIME: 1, STATION_ID: 1}, {unique: true, dropDups: true})

但它并不能按照我想要的方式运作,它拒绝过多的条目,而不是拥有或多或少60,000个条目,而现在只有7000条。

我不是Javascript或MongoDB专家,我不想走上正轨,有人可以帮助我吗?

此致

1 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为您可以在update

上使用upsert选项

这允许您输入更新查询,例如upsert : true并传入要更新的文档。

使用def getProps(String propName) { def propsFile = rootProject.file('local.properties') if (propsFile.exists()) { def props = new Properties() props.load(new FileInputStream(propsFile)) return props[propName] } else { return ""; } } 标志意味着只会将未满足更新查询的文档创建为新文档,因此不会创建重复项。

这假设如果未更改STATION_ID和TimeAsDate,则文档的其余部分也不会更改。