MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como executar a consulta nativa do MongoDB (JSON) usando apenas o mongo-java-driver?


Se sua pergunta for:

Posso passar a string acima para o driver Java e fazer com que o driver a execute?

Então você poderia use o comando db.eval. Por exemplo:
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);

Mas ... o db.eval O comando está obsoleto e seu uso não é recomendado. O driver Java do MongoDB pode ser usado para executar sua agregação, mas não em seu 'formato de string'; em vez disso, você usaria os auxiliares de agregação do driver Java para criar um formulário Java de seu comando de agregação. Muitos detalhes sobre isso nos documentos.

Aqui está um exemplo (não testado) usando um 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])))
));

.. isso pode ajudá-lo a ver a forma de tradução de shell script para Java.