MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come eseguire la query nativa MongoDB (JSON) utilizzando solo mongo-java-driver?

Se la tua domanda è:

Posso passare la stringa sopra nel driver Java e farla eseguire dal driver?

Allora potresti utilizzare il comando db.eval. Ad esempio:

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

Ma ... il db.eval il comando è deprecato e il suo utilizzo non è consigliato. Il driver Java MongoDB può essere utilizzato per eseguire la tua aggregazione ma non nella sua "forma di stringa", invece dovresti utilizzare gli helper di aggregazione del driver Java per creare una forma Java del tuo comando di aggregazione. Molti dettagli su questo nei documenti.

Ecco un esempio (non testato) che utilizza un driver Java 3.x MongoDB ...

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

.. questo potrebbe aiutarti a vedere la forma di traduzione dallo script della shell a Java.