Предполагая, что вы не хотите иметь дубликаты (т.е. с двумя документами {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 }
Позвольте мне знать, если это проясняет вещи немного!
Вы хотите, чтобы 'max_temperature' был' истинным' для документов с идентификаторами 1, 6, 8, 5 и 7? Или просто 8? –
max_temperature insert in id 1, 6, 4, 5, 7 (группа для города и максимальная температура) – Bicu
Невозможно сделать это с помощью запроса или повышения в течение одной операции. Если это не то, что вы имеете в виду, вам нужно будет опубликовать код, который вы пробовали. – WiredPrairie