Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use $redact with Aggregation in Java with mongodb template

Tags:

java

mongodb

I'm unable to add redact with mongodb template below is my mongo code which is working fine and using sping mongo 1.8.5

  db.abc.aggregate([
 { "$geoNear" : { near : { "type" : "Point", "coordinates" : [ 72.5, 19.8 ] 
 }, distanceField: "dist.calculated", maxDistance: 500000, includeLocs: "dist.location", num: 5, limit: 200, spherical: true } },
{ "$unwind" : "$items" },
{ "$redact" : { 
"$cond" : { 
if : { "$eq" : [ { "$cmp" : [ "$items.address", "$dist.location" ] }, 0 ] },
then : "$$KEEP", 
else : "$$PRUNE"
 } 
} 
}
])

Here is my java code which is not working as above mongo code

 Point point=new Point(longi,lat);
    NearQuery nearQuery = NearQuery.near(point).maxDistance(1000).spherical(true);
  Aggregation agg = Aggregation.newAggregation(Aggregation.geoNear(nearQuery, "calculated"),Aggregation.unwind("items"),
    Aggregation.group("merchantId", "_id", "catalogTypeId", "catalogStatusId", "departmentName",
                        "categoryName", "subCategoryName", "serviceFlag", "date", "availability", "distance",
                        "commissionPercentage", "createdBy", "updatedBy", "departmentId", "categoryId",
                        "subCategoryId", "createdOn", "updatedOn").push("items").as("items"),
                Aggregation.skip(skip), Aggregation.limit(limit)

        );

can anybody help me to find out how to run this query in java

my document structure

{ "_id" : "CAT106679778", "_class" : "com.ikarma.core.catalog.domain.CatalogForAdminAndMerchant", "merchantId" : "M117442443", "catalogTypeId" : "catalogTypeProduct", "catalogStatusId" : "catalogStatusDraft", "items" : [ { "name" : "Jewelry", "description" : "Jewelry", "price" : "1000", "itemStatusId" : "catalogStatusDraft", "itemStatusName" : "Draft", "unitMeasure" : 30, "stock" : NumberInt("12"), "availableStock" : NumberInt("12"), "orderStock" : NumberInt("0"), "photos" : [ "https://clappilystorage.blob.core.windows.net/clappilymerchant/M117442443/MyProduct/GiftsAnniversary GiftsJewelryJewelry/1520415128722cheers.jpg" ], "activeFlag" : "undefined", "tags" : [ "Jewelry", "Jewelry" ], "discount" : "25", "advancePayment" : "10", "unitName" : "Gm", "itemId" : NumberLong("78921671000"), "videos" : [ null, null, null ], "commissionPercentage" : 10, "commissionAmount" : 0, "itemIsDeleted" : "false", "netSellingPrice" : 750, "starCount" : 0, "deliveryCharges" : 0, "customItemCode" : "zdfg", "taxes" : 0, "perishable" : false, "itemsLat" : 21, "itemsLong" : 74, "ratingAvg" : 0, "address" : { "type" : "Point", "coordinates" : [ 74, 21 ] } }, { "name" : "Jewelry", "description" : "Jewelry", "price" : "1000", "itemStatusId" : "catalogStatusDraft", "itemStatusName" : "Draft", "unitMeasure" : 30, "stock" : NumberInt("12"), "availableStock" : NumberInt("12"), "orderStock" : NumberInt("0"), "photos" : [ "https://clappilystorage.blob.core.windows.net/clappilymerchant/M117442443/MyProduct/GiftsAnniversary GiftsJewelryJewelry/1520415128722cheers.jpg" ], "activeFlag" : "undefined", "tags" : [ "Jewelry", "Jewelry" ], "discount" : "25", "advancePayment" : "10", "unitName" : "Gm", "itemId" : NumberLong("1347268704"), "videos" : [ null, null, null ], "commissionPercentage" : 10, "commissionAmount" : 0, "itemIsDeleted" : "false", "netSellingPrice" : 750, "starCount" : 0, "deliveryCharges" : 0, "customItemCode" : "zdfg", "taxes" : 0, "perishable" : false, "itemsLat" : 22, "itemsLong" : 75, "ratingAvg" : 0, "address" : { "type" : "Point", "coordinates" : [ 75, 22 ] } }, { "name" : "Jewelry", "description" : "Jewelry", "price" : "1000", "itemStatusId" : "catalogStatusDraft", "itemStatusName" : "Draft", "unitMeasure" : 30, "stock" : NumberInt("12"), "availableStock" : NumberInt("12"), "orderStock" : NumberInt("0"), "photos" : [ "https://clappilystorage.blob.core.windows.net/clappilymerchant/M117442443/MyProduct/GiftsAnniversary GiftsJewelryJewelry/1520415128722cheers.jpg" ], "activeFlag" : "undefined", "tags" : [ "Jewelry", "Jewelry" ], "discount" : "25", "advancePayment" : "10", "unitName" : "Gm", "itemId" : NumberLong("10043410600"), "videos" : [ null, null, null ], "commissionPercentage" : 10, "commissionAmount" : 0, "itemIsDeleted" : "false", "netSellingPrice" : 750, "starCount" : 0, "deliveryCharges" : 0, "customItemCode" : "zdfg", "taxes" : 0, "perishable" : false, "itemsLat" : 23, "itemsLong" : 76, "ratingAvg" : 0, "address" : { "type" : "Point", "coordinates" : [ 76, 23 ] } } ], "departmentName" : "Gifts", "categoryName" : "Anniversary Gifts", "subCategoryName" : "Jewelry", "serviceFlag" : "", "updatedBy" : [ { "_id" : "M117442443", "name" : "Sales Team" } ], "createdBy" : [ { "_id" : "M117442443", "name" : "Sales Team" } ], "departmentId" : "5948c14be4b0d3372e47423d", "categoryId" : "5948cc1fe4b0d3372e474287", "catalogIsDeleted" : "false", "subCategoryId" : "5948cd46e4b0d3372e474291", "createdOn" : ISODate("2018-03-07T15:03:34.877+05:30"), "updatedOn" : ISODate("2018-03-08T13:09:53.373+05:30"), "availability" : [ { "startTime" : "null", "endTime" : "null" }, { "startTime" : "null", "endTime" : "null" }, { "startTime" : "null", "endTime" : "null" } ], "distance" : "0", "merchantStatus" : "Accepted" }

thank you

like image 477
gaurav singh Avatar asked Oct 17 '22 21:10

gaurav singh


1 Answers

You can use AggregationOperation to build $redact aggregation stage.

You will need 1.8.5 version.

AggregationOperation redactOperation = aggregationOperationContext -> {
    Map<String, Object> map = new LinkedHashMap<>();
    BasicDBObject cmp =  new BasicDBObject("$cmp", Arrays.asList( "$items.address","$dist.location"));
    map.put("if", new BasicDBObject("$eq", Arrays.asList(cmp, 0)));
    map.put("then", "$$KEEP");
    map.put("else", "$$PRUNE");
    return new BasicDBObject("$redact", new BasicDBObject("$cond", map));
};

Aggregation agg = Aggregation.newAggregation(
    Aggregation.geoNear(nearQuery, "calculated"), 
    Aggregation.unwind("items"),
    redactOperation,
    Aggregation.skip(skip), 
    Aggregation.limit(limit)
);
like image 183
s7vr Avatar answered Nov 15 '22 06:11

s7vr