2015-11-04 3 views
3

У меня есть Даты в одной коллекции, которые были вставлены неправильно, и находятся в простой форме "2015-09-10", строка.Петля через Монго Коллекция и обновление поля в каждом документе

Я хотел бы уточнить их, чтобы исправить ISO Формат даты.

Я пробовал прокручивать через Монго с forEach(), но я не знаю оболочку достаточно хорошо, как обновлять каждый документ в коллекции.

До сих пор я нахожусь в данный момент:

db.getCollection('schedules').find({}).forEach(function (doc) { 

    doc.time = new Date(doc.time).toUTCString(); 

    printjson(doc.time); 
    //^This just prints "Invalid Date" 

    // Also none of the below work when I try saving them 

    //doc.save(); 
    //db.getCollection('schedules').save(doc); 
}); 

Что здесь не хватает?

ответ

4

Лучший способ сделать это с помощью "Bulk" операций

var collection = db.getCollection('schedules'); 
var bulkOp = collection.initializeOrderedBulkOp(); 
var count = 0; 
collection.find().forEach(function(doc) { 
    bulkOp.find({ '_id': doc._id }).updateOne({ 
     '$set': { 'time': new Date(doc.time) } 
    }); 
    count++; 
    if(count % 100 === 0) { 
     // Execute per 100 operations and re-init 
     bulkOp.execute(); 
     bulkOp = collection.initializeOrderedBulkOp(); 
    } 
}); 

// Clean up queues 
if(count > 0) { 
    bulkOp.execute(); 
} 
+0

Wow спасибо, так что это немного иначе, чем я ожидал. Подобно мангусте почти. Является ли цель 'bulkOp.execute' периодическим обновлением 100 записей за раз здесь? @ user3100115 –

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