MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie führe ich die native MongoDB-Abfrage (JSON) nur mit dem Mongo-Java-Treiber aus?

Wenn Ihre Frage lautet:

Kann ich die obige Zeichenfolge an den Java-Treiber übergeben und vom Treiber ausführen lassen?

Dann könnten Sie Verwenden Sie den Befehl db.eval. Zum Beispiel:

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

Aber ... die db.eval Der Befehl ist veraltet und seine Verwendung wird nicht empfohlen. Der MongoDB-Java-Treiber kann verwendet werden, um Ihre Aggregation auszuführen, aber nicht in seiner „String-Form“, stattdessen würden Sie die Aggregationshelfer des Java-Treibers verwenden, um eine Java-Form Ihres Aggregationsbefehls zu erstellen. Viele Details dazu in der Dokumentation.

Hier ist ein (ungetestetes) Beispiel mit einem 3.x-MongoDB-Java-Treiber ...

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

.. dies könnte Ihnen helfen, die Form der Übersetzung von Shell-Skript nach Java zu sehen.