如何在带有 mongodb 模板的 Java 中使用 $redact 和聚合

gau*_*ngh 5 java mongodb

我无法使用下面的 mongodb 模板添加 redact 是我的 mongo 代码,它运行良好并使用了 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"
 } 
} 
}
])
Run Code Online (Sandbox Code Playgroud)

这是我的 java 代码,它不像上面的 mongo 代码那样工作

 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)

        );
Run Code Online (Sandbox Code Playgroud)

谁能帮我找出如何在java中运行这个查询

我的文档结构

{“_id”:“CAT106679778”,“_class”:“com.ikarma.core.catalog.domain.CatalogForAdminAndMerchant”,“merchantId”:“M117442443”,“catalogTypeId”:“catalogTypeProduct”,“catalogStatusStatusId”:Draft , "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/GiftsAnniversaryGiftsJewelryJewelry/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,“地址”:{“类型”:“点”,“坐标”:[74, 21]}},{“名称”:“珠宝”,“描述”:“珠宝”,“价格”:“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/GiftsAnniversaryGiftsJewelryJewelry/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,“地址”:{“类型”:“点”,“坐标”:[75, 22]}},{“名称”:“珠宝”,“描述”:“珠宝”,“价格”:“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/GiftsAnniversaryGiftsJewelryJewelry/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”: “假”, “subCategoryId”: “5948cd46e4b0d3372e474291”, “createdOn”:ISODate( “2018-03-07T15:03:34.877 + 05:30”) , "updatedOn" : ISODate("2018-03-08T13:09:53.373+05:30"), "可用性" : [ { "startTime" : "null","endTime" : "null" }, { "startTime" : "null", "endTime" : "null" }, { "startTime" : "null", "endTime" : "null" } ], "distance" : "0", "merchantStatus" : "已接受" }商户状态”:“已接受”}商户状态”:“已接受”}

谢谢你

use*_*814 3

您可以使用AggregationOperation构建$redact聚合阶段。

您将需要 1.8.5 版本。

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)
);
Run Code Online (Sandbox Code Playgroud)