假設你不希望有重複(即具有{city: "Cadiz", temperature: 30}
兩個文件,只有一個應該被標記爲max_temperature
,你可以執行以下命令:
var lastCity = null;
db.cities.find().sort({city: 1, temp: -1}).forEach(
function(doc) {
if (doc.city != lastCity) {
db.cities.update({_id:doc._id}, {$set:{"max_temperature":true}});
}
lastCity = doc.city;
}
)
對於您所提供的數據在你的問題,收集現在看起來像:
{ "_id" : 7, "city" : "bilbao", "max_temperature" : true, "temp" : 25 }
{ "_id" : 1, "city" : "cadiz", "max_temperature" : true, "temp" : 30 }
{ "_id" : 6, "city" : "cadiz", "temp" : 30 }
{ "_id" : 3, "city" : "cadiz", "temp" : 29 }
{ "_id" : 5, "city" : "malaga", "max_temperature" : true, "temp" : 36 }
{ "_id" : 4, "city" : "sevilla", "max_temperature" : true, "temp" : 42 }
{ "_id" : 8, "city" : "sevilla", "temp" : 41 }
{ "_id" : 2, "city" : "sevilla", "temp" : 40 }
如果你想重複,即文檔6也有max_temperature : true
,那麼你會改變日Ë小幅更新:
var lastCity = null;
var lastTemp = null;
db.cities.find().sort({city: 1, temp: -1}).forEach(
function(doc) {
if (doc.city != lastCity) {
lastTemp = doc.temp;
db.cities.update({_id:doc._id}, {$set:{"max_temperature":true}})
} else if (doc.temp == lastTemp) {
db.cities.update({_id:doc._id}, {$set:{"max_temperature":true}})
}
lastCity = doc.city;
}
)
這將不是給你:
{ "_id" : 7, "city" : "bilbao", "max_temperature" : true, "temp" : 25 }
{ "_id" : 1, "city" : "cadiz", "max_temperature" : true, "temp" : 30 }
{ "_id" : 6, "city" : "cadiz", "max_temperature" : true, "temp" : 30 }
{ "_id" : 3, "city" : "cadiz", "temp" : 29 }
{ "_id" : 5, "city" : "malaga", "max_temperature" : true, "temp" : 36 }
{ "_id" : 4, "city" : "sevilla", "max_temperature" : true, "temp" : 42 }
{ "_id" : 8, "city" : "sevilla", "temp" : 41 }
{ "_id" : 2, "city" : "sevilla", "temp" : 40 }
讓我知道這是否澄清事情有點!
對於ids爲1,6,8,5和7的文檔,你希望'max_temperature'爲'true'嗎?還是隻有8? –
max_temperature插入ID爲1,6,4,5,7(城市組獲得最高溫度) – Bicu
在一次操作中,無法通過查詢或插入操作來實現。如果這不是你的意思,你需要發佈你試過的代碼。 – WiredPrairie