查询条件 = start and endvar start = new Date2023-06-10T000000000+0800var end = new Date2023-06-30T000000000+0800var service_type = SINOEX_STD_NBT_UK1 分位计算逻辑var quantile = functionarr percentile if !A
import java.util.ArrayList; import java.util.Date; import java.util.List;
import org.bson.Document; import org.bson.conversions.Bson;
import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; import com.mongodb.client.AggregateIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase;
public class Main { public static void main(String[] args) { // 查询条件 >= start and < end Date start = new Date("2023-06-10T00:00:00.000+08:00"); Date end = new Date("2023-06-30T00:00:00.000+08:00"); String service_type = "SINOEX_STD_NBT_UK1";
// 分位计算逻辑
Bson quantile = new Document("$function",
new Document("body", "function(arr, percentile) { if (!Array.isArray(arr) || arr.length === 0) { return null; } var newArray = []; for (var i = 0; i < arr.length; i++) { if (arr[i] != null) { newArray.push(Number(arr[i])); } } arr = newArray; var sortedArr = arr.slice().sort(function(a, b) { return a - b; }); var n = sortedArr.length; var k = Math.floor(n * percentile); var kn = sortedArr[k]; return kn; }")
.append("args", new ArrayList<String>() {
{
add("$firstMileOutboundDiff");
add("0.95");
}
}).append("lang", "js")));
// 分组计算
List<Bson> pipeline = new ArrayList<>();
pipeline.add(new Document("$match", new Document("trace_first_mile_outbound.trace_time",
new Document("$gte", start).append("$lt", end)).append("service_type", service_type)));
Document groupBy = new Document("_id",
new Document("date",
new Document("$dateToString",
new Document("date", "$trace_first_mile_outbound.trace_time").append("format",
"%Y-%m-%d").append("timezone", "+08:00")))
.append("service_type", "$service_type").append("so_code",
"$so_code"));
groupBy.append("total", new Document("$sum", 1));
groupBy.append("firstMileOutboundDiff",
new Document("$push", new Document("$subtract",
new ArrayList<String>() {
{
add("$trace_first_mile_outbound.trace_time");
add("$pre_alert_time");
}
})));
groupBy.append("inboundCount",
new Document("$sum",
new Document("$cond",
new Document("$ifNull", new ArrayList<Object>() {
{
add("$trace_inbound.trace_time");
add(false);
}
}))));
groupBy.append("exceptionCount",
new Document("$sum",
new Document("$cond",
new Document("$ifNull", new ArrayList<Object>() {
{
add("$trace_unass.trace_time");
add(false);
}
}))));
groupBy.append("inboundDiff",
new Document("$push", new Document("$subtract",
new ArrayList<String>() {
{
add("$trace_inbound.trace_time");
add("$trace_first_mile_outbound.trace_time");
}
})));
groupBy.append("atdDiff",
new Document("$push", new Document("$subtract",
new ArrayList<String>() {
{
add("$trace_atd.trace_time");
add("$trace_inbound.trace_time");
}
})));
groupBy.append("ataCound",
new Document("$sum",
new Document("$cond",
new Document("$ifNull", new ArrayList<Object>() {
{
add("$trace_atd.trace_time");
add(false);
}
}))));
groupBy.append("ataDiff",
new Document("$push", new Document("$subtract",
new ArrayList<String>() {
{
add("$trace_ata.trace_time");
add("$trace_atd.trace_time");
}
})));
groupBy.append("atdCound",
new Document("$sum",
new Document("$cond",
new Document("$ifNull", new ArrayList<Object>() {
{
add("$trace_ata.trace_time");
add(false);
}
}))));
groupBy.append("aScanDiff",
new Document("$push", new Document("$subtract",
new ArrayList<String>() {
{
add("$trace_a_scan.trace_time");
add("$trace_ata.trace_time");
}
})));
groupBy.append("aScanCound",
new Document("$sum",
new Document("$cond",
new Document("$ifNull", new ArrayList<Object>() {
{
add("$trace_a_scan.trace_time");
add(false);
}
}))));
groupBy.append("deliverySuccessDiff",
new Document("$push", new Document("$subtract",
new ArrayList<String>() {
{
add("$trace_delivery_success.trace_time");
add("$trace_a_scan.trace_time");
}
})));
groupBy.append("deliveryCount",
new Document("$sum",
new Document("$cond",
new Document("$and", new ArrayList<Object>() {
{
add(new Document("$ifNull", new ArrayList<Object>() {
{
add("$trace_delivery_success.trace_time");
add(false);
}
}));
add(new Document("$ifNull", new ArrayList<Object>() {
{
add("$trace_a_scan.trace_time");
add(false);
}
}));
}
}))));
groupBy.append("deliverySuccess2firstMileOutboundDiff",
new Document("$push", new Document("$subtract",
new ArrayList<String>() {
{
add("$trace_delivery_success.trace_time");
add("$trace_first_mile_outbound.trace_time");
}
})));
pipeline.add(new Document("$group", groupBy));
pipeline.add(new Document("$sort", new Document("_id", 1)));
pipeline.add(new Document("$projec
原文地址: https://www.cveoy.top/t/topic/hDpS 著作权归作者所有。请勿转载和采集!