如何使用MongoTemplate将Mongo Shell脚本转换为Java?

我的Mongo Shell脚本:

db.getcollection('order').aggregate([
  { $match: { clientId: "test@gmail.com" } },{ $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","test@gmail.com")),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做到这一点的方法

xin34140 回答:如何使用MongoTemplate将Mongo Shell脚本转换为Java?

感谢您的文档,请自己完成!大声笑

    @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,OrderedDeviceByOrderId.class);
        List<OrderedDeviceByOrderId> orderedDeviceByOrderId = results.getMappedResults();

        orderedDeviceByOrderId.forEach(s -> System.out.println(s));
        return orderedDeviceByOrderId;
    }
本文链接:https://www.f2er.com/2739580.html

大家都在问