MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak wykonać natywne zapytanie MongoDB (JSON) przy użyciu tylko sterownika mongo-java?

Jeśli Twoje pytanie brzmi:

Czy mogę przekazać powyższy ciąg do sterownika Java i zlecić jego wykonanie?

Wtedy możesz użyj polecenia db.eval. Na przykład:

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

Ale ... db.eval polecenie jest przestarzałe i nie zaleca się jego używania. Sterownika MongoDB Java można użyć do wykonania agregacji, ale nie w „formie łańcuchowej”, zamiast tego można użyć pomocników agregacji sterownika Java, aby utworzyć formę Java polecenia agregacji. Mnóstwo szczegółów na ten temat w dokumentach.

Oto (nieprzetestowany) przykład użycia sterownika Java MongoDB 3.x...

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

.. to może pomóc ci zobaczyć formę tłumaczenia ze skryptu powłoki na Javę.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy zastosowanie indeksu 2dsphere w schemacie mangusty wymusza, aby pole lokalizacji było wymagane?

  2. Czy muszę ręcznie zamknąć połączenie z mangustą?

  3. Jak uciec @ w haśle w połączeniu pymongo?

  4. Wyszukiwanie bez uwzględniania wielkości liter w Mongo

  5. Czy źle jest zmienić typ _id w MongoDB na liczbę całkowitą?