Разница между defer (). Обещанием и обещанием

Чтобы преобразовать поле типа string в поле даты, вам потребуется повторить курсор, возвращаемый методом find() , с использованием метода forEach() , в пределах цикл преобразует поле в объект Date, а затем обновляет поле с помощью оператора $set .

Воспользуйтесь преимуществами Bulk API для массовые обновления, которые обеспечивают лучшую производительность, поскольку вы будете отправлять операции на сервер пакетами 1000, что дает вам лучшую производительность, поскольку вы не отправляете каждый запрос на сервер всего один раз в каждые 1000 запросов.

Ниже показан этот подход, в первом примере используется Bulk API, доступный в версиях MongoDB >= 2.6 and < 3.2. Он обновляет все документы в коллекции, меняя все поля полей created_at на дату:

var bulk = db.collection.initializeUnorderedBulkOp(),
    counter = 0;

db.collection.find({"created_at": {"$exists": true, "$type": 2 }}).forEach(function (doc) {
    var newDate = new Date(doc.created_at);
    bulk.find({ "_id": doc._id }).updateOne({ 
        "$set": { "created_at": newDate}
    });

    counter++;
    if (counter % 1000 == 0) {
        bulk.execute(); // Execute per 1000 operations and re-initialize every 1000 update statements
        bulk = db.collection.initializeUnorderedBulkOp();
    }
})
// Clean up remaining operations in queue
if (counter % 1000 != 0) { bulk.execute(); }

Следующий пример относится к новой версии MongoDB 3.2, которая с тех пор устарела Bulk API и предоставил новый набор apis, используя bulkWrite() :

var bulkOps = [];

db.collection.find({"created_at": {"$exists": true, "$type": 2 }}).forEach(function (doc) { 
    var newDate = new Date(doc.created_at);
    bulkOps.push(         
        { 
            "updateOne": { 
                "filter": { "_id": doc._id } ,              
                "update": { "$set": { "created_at": newDate } } 
            }         
        }           
    );     
})

db.collection.bulkWrite(bulkOps, { "ordered": true });

16
задан jiananshi 19 March 2019 в 02:52
поделиться