sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kör man MongoDB native query (JSON) med endast mongo-java-drivrutin?

Om din fråga är:

Kan jag skicka ovanstående sträng till Java-drivrutinen och få drivrutinen att köra den?

kan du använd kommandot db.eval. Till exempel:

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

Men ... db.eval kommandot är föråldrat och dess användning rekommenderas inte. MongoDB Java-drivrutinen kan användas för att köra din aggregering men inte i dess "strängform", istället skulle du använda Java-drivrutinens aggregeringshjälpmedel för att skapa en Java-form av ditt aggregeringskommando. Många detaljer om detta i dokumenten.

Här är ett (otestat) exempel med en 3.x MongoDB Java-drivrutin ...

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

.. detta kan hjälpa dig att se formen för översättning från skalskript till Java.



  1. Hur får man samma rang för samma poäng i Redis ZRANK?

  2. mongodb:infoga om det inte finns

  3. Redis är entrådig, hur gör den då samtidig I/O?

  4. MongoDB-servern är inte tillgänglig i lokalt nätverk trots bindande ip