New aggregation feature with Mongo 3.2 driver, using Java

后端 未结 1 738
醉梦人生
醉梦人生 2021-02-06 18:53

I want to perform an aggregation in Mongo 3.2 as explained here, but in Java:

https://docs.mongodb.org/master/reference/operator/aggregation/lookup/#pipe._S_lookup

1条回答
  •  盖世英雄少女心
    2021-02-06 19:44

    Running the following aggregation pipeline should give you the needed result

    pipeline = [
        {
            "$match": {
                "_id": employeeId
            }
        },
        {
            "$lookup": {
                "from": "company", 
                "localField": "companyId",
                "foreignField": "_id",
                "as": "company"
            }
        },
        {
            "$project": {
                "name": 1,
                "lastName": 1,
                "companyId": 1,
                "companyName": "$company.companyName"
            }
        }
    ];
    db.employee.aggregate(pipeline);
    

    Java test implementation

    public class JavaAggregation {
        public static void main(String args[]) throws UnknownHostException {
    
            MongoClient mongo = new MongoClient();
            DB db = mongo.getDB("test");
    
            DBCollection coll = db.getCollection("employee");
    
            // create the pipeline operations, first with the $match
            DBObject match = new BasicDBObject("$match",
                new BasicDBObject("_id", employeeId)
            );
    
            // build the $lookup operations
            DBObject lookupFields = new BasicDBObject("from", "company");
            lookupFields.put("localField", "companyId");
            lookupFields.put("foreignField", "_id");
            lookupFields.put("as", "company");      
            DBObject lookup = new BasicDBObject("$lookup", lookupFields);
    
            // build the $project operations
            DBObject projectFields = new BasicDBObject("name", 1);
            projectFields.put("lastName", 1);
            projectFields.put("companyId", 1);
            projectFields.put("companyName", "$company.companyName");       
            DBObject project = new BasicDBObject("$project", projectFields);
    
            List pipeline = Arrays.asList(match, lookup, project);
    
            AggregationOutput output = coll.aggregate(pipeline);
    
            for (DBObject result : output.results()) {
                System.out.println(result);
            }
        }
    }
    

    0 讨论(0)
提交回复
热议问题