Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb mongo中的BulkWriterResult,N匹配,更新的文档数不匹配_Mongodb_Aggregation Framework_Bulk Operations - Fatal编程技术网

Mongodb mongo中的BulkWriterResult,N匹配,更新的文档数不匹配

Mongodb mongo中的BulkWriterResult,N匹配,更新的文档数不匹配,mongodb,aggregation-framework,bulk-operations,Mongodb,Aggregation Framework,Bulk Operations,我使用聚合框架来更新所有用户的用户统计数据,大约是50k,其中30k至少交付了一份订单 现在我使用的查询是 var orderIds = db.delivery.find({"status": "DELIVERED"}).map(function(d){return d.order;}), counter = 0, bulk = db.user.initializeUnorderedBulkOp(); var userstatsCursor = db.orders.aggregate([ {

我使用聚合框架来更新所有用户的用户统计数据,大约是50k,其中30k至少交付了一份订单

现在我使用的查询是

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,但问题是

从文档中可以看出,nMatch是更新操作的编号,因此对于我来说,我正在使用交付的订单更新所有用户,大约为30k,但在我的例子中,它显示的数字很少,113

此外,如果我是对的,那么即使我更改了批量大小,对于同一查询,更新操作的数量也应该保持不变,但是对于不同的批量大小,查询会给出不同的NMATCH,例如对于600,它给出413,对于1000,它给出613

你能解释一下吗