МассовыйРезультат в монго, nMatched и ни один из обновленных документов не совпадает

Я использовал агрегатную платформу для обновления статистики пользователей для всех пользователей, которая составляет где-то около 50 тыс., из которых 30 тыс. получили хотя бы один заказ.

Теперь я использую запрос

var orderIds = db.delivery.find({"status": "DELIVERED"}).map(function(d){return d.order;}),
counter = 0,
bulk = db.user.initializeUnorderedBulkOp();

var userstatsCursor = db.orders.aggregate([
{ "$match": { "_id": { "$in": orderIds } } },
{ 
    "$group": { 
        "_id": "$customer", 
        "orders": { "$sum": 1 },
        "firstOrderDate": { "$min": "$dateCreated" },
        "lastOrderDate":{ "$max": "$dateCreated" } } 
    } 
}
]);

userstatsCursor.forEach(function (x){
bulk.find({ "_id": x._id }).updateOne({ 
    "$set": { 
        "totalOrders": x.orders,
        "firstOrderDate": x.firstOrderDate,
        "lastOrderDate": x.lastOrderDate
    }
});

counter++;
if (counter % 500 == 0) {
    bulk.execute(); // Execute per 500 operations and 
    // re-initialize every 500 update statements
    bulk = db.user.initializeUnorderedBulkOp();
}
});

// Clean up remaining operations in queue
if (counter % 500 != 0) { bulk.execute(); }

он находит все доставленные заказы, а затем получает всех этих клиентов и обновляет их firstOrderDate, lastOrderDate и totalOrders, но проблема заключается в

из документации говорится, что nMatched - это нет операций обновления, поэтому для меня я обновляю всех пользователей с доставленными заказами, которые где-то около 30 тыс., но в моем случае это показывает очень меньшее число 113,

Кроме того, если я прав, операции обновления не должны оставаться одинаковыми для одного и того же запроса, даже если я изменяю объемный размер, но запрос дает другой nMatched для другого объемного размера, например, для 600 он дает 413, для 1000 - 613.

Вы можете объяснить?

0 ответов

Другие вопросы по тегам