sql >> Database >  >> NoSQL >> MongoDB

Hoe MongoDB native query (JSON) uitvoeren met alleen mongo-java-driver?

Als uw vraag is:

Kan ik de bovenstaande string doorgeven aan de Java-driver en deze door de driver laten uitvoeren?

Dan zou je kon gebruik de opdracht db.eval. Bijvoorbeeld:

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);

Maar ... de db.eval commando is verouderd en het gebruik ervan wordt afgeraden. Het MongoDB Java-stuurprogramma kan worden gebruikt om uw aggregatie uit te voeren, maar niet in zijn 'tekenreeksvorm', in plaats daarvan zou u de aggregatiehelpers van het Java-stuurprogramma gebruiken om een ​​Java-vorm van uw aggregatiecommando te maken. Veel details hierover in de documenten.

Hier is een (niet getest) voorbeeld met een 3.x MongoDB Java Driver ...

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])))
));

.. dit zou je kunnen helpen om de vorm van vertaling van shellscript naar Java te zien.



  1. Redis Publiceren/abonneren

  2. Zookeeper vs In-memory-data-grid vs Redis

  3. MongoDB samengestelde index gebruik

  4. Mongo-query-uitvoer afdrukken naar een bestand terwijl deze zich in de mongo-shell bevindt