MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB поле за преименуване на база данни в масива

Колкото и да си струва, макар да звучи ужасно да трябва да се направи, решението всъщност е доста лесно. Това разбира се зависи от това колко записи имате. Но ето моят пример:

db.Setting.find({ 'Value.Tiers.0.AssetsUnderManagement': { $exists: 1 } }).snapshot().forEach(function(item)
{    
    for(i = 0; i != item.Value.Tiers.length; ++i)
    {
        item.Value.Tiers[i].Aum = item.Value.Tiers[i].AssetsUnderManagement;
        delete item.Value.Tiers[i].AssetsUnderManagement;
    }
    
    db.Setting.update({_id: item._id}, item);
});

Преглеждам колекцията си, където се намира масивът и се намира "грешното" име. След това преглеждам подколекцията, задавам новата стойност, изтривам старата и актуализирам целия документ. Беше сравнително безболезнено. Разбира се, имам само няколко десетки хиляди реда за търсене, от които само няколко десетки отговарят на критериите.

Все пак се надявам този отговор да помогне на някого!

Редактиране:Добавен snapshot() към заявката. Вижте защо в коментарите.

Трябва да приложите snapshot() до курсора, преди да извлечете документи от базата данни. Можете да използвате само snapshot() с неразделени колекции.

От MongoDB 3.4, snapshot() функцията беше премахната. Така че, ако използвате Mongo 3.4+, примерът по-горе трябва да премахне snapshot() функция.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Накарайте $elemMatch (проекция) да върне всички обекти, които отговарят на критериите

  2. Как да проверите дали полето на масива е част от друг масив в MongoDB?

  3. objasni() в Mongodb:разлики между nscanned и nscannedObjects

  4. Някой пробвал ли е MongoDB на Google App Engine?

  5. Внедряване на пагинация в mongodb