0

私はmongodbで演習を行っています。次の構造のドキュメントがあります。

id    city     temperature
1     cadiz         30
2     sevilla       40
3     cadiz         29
4     sevilla       42
5     malaga        36
6     cadiz         30
7     bilbao        25
8     sevilla       41

各都市に挿入されたように、1つのフィールド値を最大温度にすることができますか? 例:

max_temperature :true;

注文都市と注文温度が従わない..ありがとう。私の英語でごめんなさい。

4

1 に答える 1

3

重複したくないと仮定すると(つまり、 の 2 つのドキュメントで{city: "Cadiz", temperature: 30}、1 つだけを としてマークする必要がある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 }

それが物事を少し明確にするかどうか教えてください!

于 2013-09-19T17:31:07.550 に答える