首页 > 解决方案 > 大集合batchSize的mongoDB查询

问题描述

我正在尝试从我的集合中查询并打印出结果,但它太大并且批处理只返回前几百个左右的结果。

我尝试使用 batchSize 来提高限制,但每次尝试将其实现到脚本中时都会出错。

我期望的结果数量约为 15000 条记录。

我正在运行 .js 脚本,如下所示:

db = db.getSiblingDB('local');
print("START");
result = (db.idlsfcontractroles.aggregate([
  {"$lookup":{
    "from":"idlsfcontracts",
    "localField":"Contract__r_ExternalId__c",
    "foreignField":"ExternalId__c",
    "as":"Con"
  }},
  {"$unwind":"$Con"},
  {"$match":{"Con.Status__c":1,"Con.Type__c":1,"Con.ConductingCompany__c":9}},
  {"$group":{"_id":"$Account__r_MDMExternalId__c"}}
]));
printjson(result);

标签: node.jsmongodb

解决方案


使用跳过/限制来翻阅您的结果,直到完成。

var skip = 0;
do {
    result = (db.idlsfcontractroles.aggregate([
         {"$lookup":{
          "from":"idlsfcontracts",
          "localField":"Contract__r_ExternalId__c",
          "foreignField":"ExternalId__c",
          "as":"Con"
         }},
         {"$unwind":"$Con"},
         {"$skip": skip},
         {"$limit": 100},
         {"$match": 
             {"Con.Status__c":1,"Con.Type__c":1,"Con.ConductingCompany__c":9}},
         {"$group":{"_id":"$Account__r_MDMExternalId__c"}}
    ]))
    printjson(result);
    skip += 100;
} while (result)

推荐阅读