2017-04-06 1 views
0

mongodb 컬렉션에서 데이터를 가져 오려고 할 때 예외가 발생합니다. 이 컬렉션에는 매우 큰 데이터가 있습니다.Java with mongodb

com.mongodb.MongoQueryException: Query failed with error code 10334 and error message 'BSONObj size: 24020168 (0x16E84C8) is invalid. Size must be between 0 and 16793600(16MB)' on server 10.15.0.227:27017 

그리고 다음은 내가 MongoDB를에서 데이터를 가져 오는 데 사용 내 쿼리입니다 :

는 예외입니다

:

db.getCollection('triggered_policies').aggregate(
[{ "$match" : { "policy_name" : "EIQSOC-1040-ec"}}, 
{ "$project" : { "cust_created_at" : { "$add" : [ "$created_at" , 19800000]} , "event_ids" : "$event_ids" , "trigger_time" : "$trigger_time" , "created_at" : "$created_at" , "triggered_rules" : "$triggered_rules"}}, 
{ "$sort" : { "created_at" : -1}}, 
{ "$group" : 
    { "_id" : 
     { 
      "$hour" : "$cust_created_at"} , 
      "triggered_policies" : { "$addToSet" : { "trigger_time" : "$trigger_time" , "created_at" : "$created_at" , "event_ids" : "$event_ids" , "triggered_rules" : "$triggered_rules"} 
     } 
    } 
}, 
{ "$sort" : { "_id" : 1}} 
]) 

에 따라 우리가 받고있는 정확한 예외

Error: getMore command failed: { 
    "ok" : 0, 
    "errmsg" : "BSONObj size: 25994482 (0x18CA4F2) is invalid. Size must be between 0 and 16793600(16MB)", 
    "code" : 10334 
} 

문제를 해결하는 데 도움을주세요.

답변

0

집계 중에 생성 된 문서가 mongo db의 16MB 크기 제한을 초과하는 것처럼 보입니다. 하나의 문서에 16MB 크기 제한을 초과하는 너무 많은 데이터를 축적하지 않도록 집계 쿼리를 변경해야 할 수도 있습니다.

BSON 문서 크기 최대 BSON 문서의 크기가 16 메가 바이트 :

다음은 몽고 DB 문서에서 인용이다. 최대 문서 크기는 단일 문서에서 과도한 양의 RAM을 사용할 수 없도록하거나 전송 중에 과도한 대역폭을 사용할 수 없도록합니다. MongoDB는 최대 크기보다 큰 문서를 저장하기 위해 GridFS API를 제공합니다. GridFS에 대한 자세한 내용은 mongofiles 및 드라이버 설명서를 참조하십시오.

+0

created_at에 색인을 정의하면 집계 중에 조작 된 데이터의 크기를 줄이는 데 도움이됩니다. –

+0

빠른 답장을 보내 주신 JayKrish에게 감사드립니다. 하지만 그런 종류의 질문을 준비하는 데 도움이됩니다. –

+0

문제는 $ group 때문에 $ addToSet을 사용하고 있습니다.이 경우 모든 고유 데이터가 배열에 추가되고 문서 크기가 증가합니다. 대신 이러한 문서에서 필요한 값만 가져 오십시오. – JayKrish