MongoDB를 처음 사용했기 때문에 귀하의 도움에 감사드립니다.MongoDB는 180 레벨의 중첩 수준을 초과하여 문서를 삽입 할 수 없습니다.
MongoDB의 java 드라이버 3.4.2를 사용하여 map/reduce를 시도하고 있습니다.
는 I는 이와 같은 문서를 갖는 컬렉션 Collection의있다 : I가 myArray의 모든 조합을 얻기하고자
{
"_id" : ObjectId("5a29a6757c5def07307a4b6f"),
"someProperty1" : "454545",
"someProperty2" : "1234",
"myArray" : [
"1",
"2",
"3",
]
}
[1,2] [1,3] [2,1] [2,3] [3,1] [3,2]
가장 긴 myArray에는 20 개의 요소가 있습니다.
나는 다음을 사용하여 시도했다 : 나는 적은 양의 데이터를 테스트 할 때
db.collectionA.mapReduce(
function() {
var elem= this;
this.myArray.forEach(function (parent) {
elem.myArray.forEach(function (child) {
if (parent !== child)
emit(parent, child);
});
});
},
function (key, values) {
return {
result: Array.from(new Set(values))
};
},
{
query: {
$where: "this.myArray.length > 1"
},
out: "collectionB"
});
그것은 괜찮 았는데. 문제는 이제 원본 컬렉션에 2 천 1 백 5 십만 문서가 있으며이 예외가 발생합니다.
예외 스레드에서 "풀-3-스레드-5" com.mongodb.MongoCommandException : 서버 로컬 호스트에서 '이을 중첩의 180 개 수준을 초과하기 때문에 문서를 삽입 할 수 없습니다 ' : 명령 오류 15 실패 : 27017. 전체 응답은 { "ok": 0.0, "errmsg": "180 레벨의 중첩으로 문서를 삽입 할 수 없습니다.", "코드": 15, "codeName": "오버플로"} com.mongodb. connection.ProtocolHelper.getCommandFailureException com.mongodb.connection.CommandProtocol.execute (CommandProtocol.java:114)에서 (ProtocolHelper.java:115) 내가 잘못 뭐하는 거지
에서? 이것에 접근하는 올바른 방법은 무엇입니까?
미리 감사드립니다.