Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- count = db.coll.count();
- db.coll.find().sort( {"a":1} ).skip(count / 2 - 1).limit(1);
- GroupOperation countByBookOwner = group("owner").count().as("nbBooks");
- SortOperation sortByCount = sort(Direction.ASC, "nbBooks");
- GroupOperation putInArray = group().push("nbBooks").as("nbBooksArray");
- ProjectionOperation getSizeOfArray = project("nbBooksArray").and("nbBooksArray").size().as("size");
- ProjectionOperation divideSizeByTwo = project("nbBooksArray").and("size").divide(2).as("middleFloat");
- ProjectionOperation getIntValueOfDivisionForBornLeft = project("middleFloat", "nbBooksArray").and("middleFloat")
- .project("trunc").as("beginMiddle");
- ProjectionOperation add1ToBornLeftToGetBornRight = project("beginMiddle", "middleFloat", "nbBooksArray")
- .and("beginMiddle").project("add", 1).as("endMiddle");
- ProjectionOperation arrayElementAt = project("beginMiddle", "endMiddle", "middleFloat", "nbBooksArray")
- .and("nbBooksArray").project("arrayElemAt", "$beginMiddle").as("beginValue").and("nbBooksArray")
- .project("arrayElemAt", "$endMiddle").as("endValue");
- ProjectionOperation averageForMedian = project("beginMiddle", "endMiddle", "middleFloat", "nbBooksArray",
- "beginValue", "endValue").and("beginValue").project("avg", "$endValue").as("median");
- Aggregation aggregation = newAggregation(countByBookOwner, sortByCount, putInArray, getSizeOfArray,
- divideSizeByTwo, getIntValueOfDivisionForBornLeft, add1ToBornLeftToGetBornRight, arrayElementAt,
- averageForMedian);
- long time = System.currentTimeMillis();
- AggregationResults<MedianContainer> groupResults = mongoTemplate.aggregate(aggregation, "book",
- MedianContainer.class);
- {
- "aggregate": "book" ,
- "pipeline": [
- {
- "$group": {
- "_id": "$owner" ,
- "nbBooks": {
- "$sum": 1
- }
- }
- } , {
- "$sort": {
- "nbBooks": 1
- }
- } , {
- "$group": {
- "_id": null ,
- "nbBooksArray": {
- "$push": "$nbBooks"
- }
- }
- } , {
- "$project": {
- "nbBooksArray": 1 ,
- "size": {
- "$size": ["$nbBooksArray"]
- }
- }
- } , {
- "$project": {
- "nbBooksArray": 1 ,
- "middleFloat": {
- "$divide": ["$size" , 2]
- }
- }
- } , {
- "$project": {
- "middleFloat": 1 ,
- "nbBooksArray": 1 ,
- "beginMiddle": {
- "$trunc": ["$middleFloat"]
- }
- }
- } , {
- "$project": {
- "beginMiddle": 1 ,
- "middleFloat": 1 ,
- "nbBooksArray": 1 ,
- "endMiddle": {
- "$add": ["$beginMiddle" , 1]
- }
- }
- } , {
- "$project": {
- "beginMiddle": 1 ,
- "endMiddle": 1 ,
- "middleFloat": 1 ,
- "nbBooksArray": 1 ,
- "beginValue": {
- "$arrayElemAt": ["$nbBooksArray" , "$beginMiddle"]
- } ,
- "endValue": {
- "$arrayElemAt": ["$nbBooksArray" , "$endMiddle"]
- }
- }
- } , {
- "$project": {
- "beginMiddle": 1 ,
- "endMiddle": 1 ,
- "middleFloat": 1 ,
- "nbBooksArray": 1 ,
- "beginValue": 1 ,
- "endValue": 1 ,
- "median": {
- "$avg": ["$beginValue" , "$endValue"]
- }
- }
- }
- ]
- db.collection.aggregate([
- { "$match": { "processingStatus": "Completed" } },
- {
- "$group": {
- "_id": "$userId",
- "valueArray": {
- "$push": "$value"
- }
- }
- },
- { "$sort": { "value": 1 } },
- {
- "$project": {
- "_id": 0,
- "userId": "$_id",
- "valueArray": 1,
- "size": { "$size": ["$valueArray"] }
- }
- },
- {
- "$project": {
- "userId": 1,
- "valueArray": 1,
- "isEvenLength": { "$eq": [{ "$mod": ["$size", 2] }, 0 ] },
- "middlePoint": { "$trunc": { "$divide": ["$size", 2] } }
- }
- },
- {
- "$project": {
- "userId": 1,
- "valueArray": 1,
- "isEvenLength": 1,
- "middlePoint": 1,
- "beginMiddle": { "$subtract": [ "$middlePoint", 1] },
- "endMiddle": "$middlePoint"
- }
- },
- {
- "$project": {
- "userId": 1,
- "valueArray": 1,
- "middlePoint": 1,
- "beginMiddle": 1,
- "beginValue": { "$arrayElemAt": ["$stepsArray", "$beginMiddle"] },
- "endValue": { "$arrayElemAt": ["$stepsArray", "$endMiddle"] },
- "isEvenLength": 1
- }
- },
- {
- "$project": {
- "userId": 1,
- "valueArray": 1,
- "middlePoint": 1,
- "beginMiddle": 1,
- "beginValue": 1,
- "endValue": 1,
- "middleSum": { "$add": ["$beginValue", "$endValue"] },
- "isEvenLength": 1
- }
- },
- {
- "$project": {
- "userId": 1,
- "valueArray": 1,
- "median": {
- "$cond": {
- if: "$isEvenLength",
- then: { "$divide": ["$middleSum", 2] },
- else: { "$arrayElemAt": ["$stepsArray", "$middlePoint"] }
- }
- }
- }
- }
- ])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement