2013-11-06 2 views
0

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

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

То, что я хотел бы сделать, это скопировать season_year ключ/Вэл к «вершине уровень ", оставив его также встроенным в хэш-код meta. Так будет дублироваться и конечный результат будет выглядеть следующим образом:

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

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

ответ

5

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

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

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

Это отлично, спасибо Сальвадор. – randombits

Смежные вопросы