Как обновить ~ 20000 записей в MongoDB с помощью этих критериев

У меня есть документ MongoDB, который выглядит следующим образом:

"sport": "NFL",
"team_id": 5,
"week_num": 6,
"meta": {
   .... more data ....,
   "season_year": 2013
}

То, что я хотел бы сделать, это скопировать ключ /t 21 > в документ верхнего уровня, оставив его также встроенным в хеш < <22 > . Поэтому он будет дублироваться, и конечный результат будет выглядеть следующим образом:

"sport": "NFL",
"team_id": 5,
"week_num": 6,
"season_year": 2013,
"meta": {
   .... more data ....,
   "season_year": 2013
}

Существует ли тривиальный способ обновления всех документов в моей коллекции с помощью описанной выше логики? Я использую MongoDB shell version: 2.4.3

Ответ 1

Проблема заключается в том, что во время обновления вы не можете ссылаться на документ, который вы обновляете. Таким образом, вы не можете достичь того, чего хотите в одном запросе.

Вам нужно перебирать все документы и сохранять их по одному:

db.yourCollection.find({}).forEach(function(doc) {
  doc.season_year = doc.meta.season_year;
  db.yourCollection.save(doc);
});