У меня не хватило времени, поэтому использовал следующий обходной путь. Подробнее рассмотрим предложение Morcos. Но следующий код также работает.

апустить нативные запросы монго, используя только java-mongo-драйвер.

нет Spring-Data или EclipseLink или Hibernate OGM,Только используя Java-Монго-драйвер

Пример запроса:

db.orders.aggregate([
   {
      $unwind: "$specs"
   },
   {
      $lookup:
         {
            from: "inventory",
            localField: "specs",
            foreignField: "size",
            as: "inventory_docs"
        }
   },
   {
      $match: { "inventory_docs": { $ne: [] } }
   }
])
 glytching03 нояб. 2017 г., 12:17
Вы спрашиваете, как выразить эту выше агрегатную операцию с помощью драйвера Java? Или вы спрашиваете, можете ли вы передать приведенную выше строку в драйвер Java и заставить драйвер выполнить ее?
 Marco03 нояб. 2017 г., 11:39
Из официальной документации:mongodb.github.io/mongo-java-driver/3.5/driver/tutorials/...

Ответы на вопрос(2)

поэтому использовал следующий обходной путь. Подробнее рассмотрим предложение Morcos. Но следующий код также работает.

import com.infrasoft.mongo.MongoClientFactory;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.CommandResult;
import com.mongodb.DB;
import com.mongodb.DBObject;
import com.mongodb.util.JSON;

/**
 *
 * @author charudatta.joshi
 */
public class TestNaiveQuery1 {

    public static void main(String[] args) {

        String nativeQuery = "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"
                + "])";

        DBObject command = new BasicDBObject();
        DB db = MongoClientFactory.getMongoClientFactory().getMongoClient().getDB("frms_data_demo");

        nativeQuery = "function() { return (" + nativeQuery + ").toArray(); }";

        //command.put("eval", "function() { return db." + collectionName + ".find(); }");
        command.put("eval", nativeQuery);
        CommandResult result = db.command(command);

        BasicDBList dbObjList = (BasicDBList) result.toMap().get("retval");

        DBObject dbo0 = (BasicDBObject) dbObjList.get(0);
        DBObject dbo1 = (BasicDBObject) dbObjList.get(0);

        System.out.println(dbObjList.get(0));
        System.out.println(dbObjList.get(1));
        // .... just loop on dbObjList

    }


}

Могу ли я передать вышеуказанную строку в драйвер Java и заставить драйвер выполнить ее?

Затем вымог использоватьdb.eval команда. Например:

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

Но ...db.eval команда устарела и ее использованиене рекомендуется, Драйвер Java MongoDB можно использовать для выполнения агрегации, но не в его «строковой форме», вместо этого вы можете использовать помощники агрегирования драйвера Java для создания формы Java вашей команды агрегации. Много подробностей об этомв документах.

Вот (непроверенный) пример использования 3.x драйвера MongoDB Java ...

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

... это может помочь вам увидеть форму перевода сценария оболочки в Java.

Ваш ответ на вопрос