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

mongo-java-driverのみを使用してMongoDBネイティブクエリ(JSON)を実行するにはどうすればよいですか?

    質問の場合:

    上記の文字列をJavaドライバーに渡して、ドライバーに実行させることはできますか?

    次に、できた db.evalコマンドを使用します。例:

    MongoDatabase database = mongoClient.getDatabase("...");
    
    Bson command = new Document("eval", "db.orders.aggregate([\n" +
            "   {\n" +
            "      $unwind: \"$specs\"\n" +
            "   },\n" +
            "   {\n" +
            "      $lookup:\n" +
            "         {\n" +
            "            from: \"inventory\",\n" +
            "            localField: \"specs\",\n" +
            "            foreignField: \"size\",\n" +
            "            as: \"inventory_docs\"\n" +
            "        }\n" +
            "   },\n" +
            "   {\n" +
            "      $match: { \"inventory_docs\": { $ne: [] } }\n" +
            "   }\n" +
            "])");
    Document result = database.runCommand(command);
    

    しかし ... db.eval コマンドは非推奨であり、その使用はお勧めしません。 MongoDB Javaドライバーを使用して集計を実行できますが、「文字列形式」では使用できません。代わりに、Javaドライバーの集計ヘルパーを使用して集計コマンドのJava形式を作成します。これに関する詳細はドキュメントにたくさんあります。

    これは、3.x MongoDB Javaドライバーを使用した(テストされていない)例です...

    MongoCollection<Document> collection = mongoClient.getDatabase("...").getCollection("...");
    
    AggregateIterable<Document> documents = collection.aggregate(Arrays.asList(
            // the unwind stage
            new Document("$unwind", "$specs"),
    
            // the lookup stage
            new Document("$lookup", new Document("from", "inventory")
                    .append("localField", "specs")
                    .append("foreignField", "size")
                    .append("as", "inventory_docs")),
    
            // the match stage
            new Document("$match", new Document("inventory_docs", new BasicDBObject("$ne", new String[0])))
    ));
    

    ..これは、シェルスクリプトからJavaへの変換の形式を確認するのに役立つ場合があります。



    1. SQLの日付から月の名前を取得する

    2. 春のデータを使用してMongoRepositoryでクエリアノテーションを使用しながらクエリを表示する方法

    3. mongooseを使用してmongoオブジェクトのフィールドを空に設定します

    4. golang+redis同時実行スケジューラのパフォーマンスの問題