Как превратить скрипт Mongo Shell в Java с помощью MongoTemplate?

Мой сценарий оболочки Mongo:

db.getCollection('order').aggregate([
  { $match: { clientId: "[email protected]" } },
  { $lookup: { from: 'ordereddevice', localField: 'id', foreignField: 'order', as: 'orderedDevices' } }
])

Я использую вот что:

MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
MongoClient mongoClient = new MongoClient(connectionString);
MongoDatabase database = mongoClient.getDatabase("db_name");
MongoCollection < Document > collection = database.getCollection("order");
List < Document > pipeline = Arrays.asList(new Document().append("$match", new Document().append("clientId", "[email protected]")), new Document().append("$lookup", new Document().append("from", "ordereddevice").append("localField", "id").append("foreignField", "order").append("as", "orderedDevices")));
Block < Document > printBlock = new Block < Document > () {
    @Override public void apply(final Document document) {
        System.out.println(document.get("_id"));
    }
};
collection.aggregate(pipeline).forEach(printBlock);

Но он повторно подключит MongoDB, поэтому я ищу способ использовать MongoTemplate для этого.


person Justin Hung    schedule 21.01.2020    source источник
comment
Вот справочная документация с примерами использования mongoTemplate. Пожалуйста, отправьте любой конкретный вопрос, который у вас есть. Вы просто пытаетесь использовать mongoTemplate или есть конкретная проблема?   -  person prasad_    schedule 21.01.2020


Ответы (1)


Спасибо за документ, доделываю сам! ржу не могу

    @Autowired
    MongoTemplate mongoTemplate;

    @Override
    public List<OrderedDeviceByOrderId> findOrderedDeviceByOrderId(String clientid) {
        AggregationOperation lookup = Aggregation.lookup("ordereddevice","_id","order","Devices");
        AggregationOperation match = Aggregation.match(Criteria.where("clientId").is(clientid));
        Aggregation agg = Aggregation.newAggregation(match, lookup);

        AggregationResults<OrderedDeviceByOrderId> results = mongoTemplate.aggregate(agg, "order", OrderedDeviceByOrderId.class);
        List<OrderedDeviceByOrderId> orderedDeviceByOrderId = results.getMappedResults();

        orderedDeviceByOrderId.forEach(s -> System.out.println(s));
        return orderedDeviceByOrderId;
    }
person Justin Hung    schedule 04.02.2020