私はMongoDBを初めて使いました。本当にありがとうございます。MongoDBは180レベルの入れ子を超えているため文書を挿入できません
MongoDBのJavaドライバ3.4.2を使ってmap/reduceを実行しようとしています。
は、私はそのようなこの1などの文書を持っているコレクションcollectionAを持っている:私は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,150万のドキュメントがあり、この例外がスローされています。
例外スレッドで「プール-3-スレッド-5」 com.mongodb.MongoCommandException: サーバーのローカルホスト上で「それはをネストの180のレベルを超えているため、文書を挿入することはできません」 :コマンドがエラー15で失敗しました:27017。完全な応答は、 com.mongodbに「」、 「code」:15、「codeName」:「Overflow」}、「errmsg」: 「文書が180レベルの入れ子を超えているため挿入できません。 connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:115) でcom.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:114)
で私が間違って何をしているのですか?これにアプローチする正しい方法は何でしょうか?
ありがとうございます。