sql >> データベース >  >> NoSQL >> MongoDB

MongoDB Javaドライバーを使用したMapReduceが、BSONElementアサーションのタイプが間違っていると失敗する

    今日、私は自分の間違いに出くわし、誰かが同様の問題に遭遇した場合に備えて、ここで解決策を共有しようと考えました。

    mapReduceの呼び出し メソッドが問題を引き起こしていました:

    MapReduceOutput sum = collection
                    .mapReduce(MAP, REDUCE_MAX, null, null);
    

    このメソッドのJavadocを見てください:

    /**
     * performs a map reduce operation
     * Runs the command in REPLACE output mode (saves to named collection)
     *
     * @param map
     *            map function in javascript code
     * @param outputTarget
     *            optional - leave null if want to use temp collection
     * @param reduce
     *            reduce function in javascript code
     * @param query
     *            to match
     * @return
     * @throws MongoException
     * @dochub mapreduce
     */
    

    コマンドがREPLACEを使用して実行されることを示します 出力モードとして、一時的なコレクションが必要な場合は、outputTarget nullである必要があります 。

    残念ながら、コンストラクターMapReduceCommandmapReduceで使用されます メソッドは、outputTargetのみを許可します OutputTypeの場合、null許容になります INLINEに設定されています (MapReduceCommand.getOutputTarget()のJavadocによると 。

    したがって、私がしなければならなかったのは、3番目のパラメーターをnullから変更することだけです。 いくつかのString 、そのように:

    MapReduceOutput sum = collection
                    .mapReduce(MAP, REDUCE_MAX, "tmp", null);
    

    これは、なぜそれが機能しなかったのかを理解しようとしている間、私が遊んでいなかった唯一のパラメーターのようでした。誰かがこれがお役に立てば幸いです。



    1. トップMongoDBリソース

    2. 重複する値をmongodbに保存するように制限する

    3. これら2つのMongoDBクエリの違いは何ですか?

    4. laraveljenssegersをmongodbatlasクラスターに接続します