栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在MongoDB中计算的分组依据字段

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在MongoDB中计算的分组依据字段

实际上,您可以先使用“项目”来做类似的事情,但是对我来说,

$project
事先需要一个阶段有点反常理:

    Aggregation agg = newAggregation(        project("quantity") .andexpression("dayOfMonth(date)").as("day") .andexpression("month(date)").as("month") .andexpression("year(date)").as("year") .andexpression("price * quantity").as("totalAmount"),        group(fields().and("day").and("month").and("year")) .avg("quantity").as("averavgeQuantity") .sum("totalAmount").as("totalAmount") .count().as("count")    );

就像我说的那样,违反直觉,因为您应该只可以在

$group

舞台上声明所有这些内容,但是助手似乎并没有这样工作。序列化有点有趣(用数组包装date运算符参数),但是它确实起作用了。但是,这是两个流水线阶段,而不是一个。

这是什么问题?通过将阶段分开,“项目”部分会强制处理管道中的所有文档,以便获得计算出的字段,这意味着在进入分组阶段之前,它会经过所有步骤。

通过以两种形式运行查询,可以清楚地看到处理时间的差异。在一个单独的项目阶段,在我的硬件上执行该查询所需的时间比在“组”操作期间计算所有字段的查询要长三倍。

因此,似乎目前唯一正确构建此方法的方法是自己构建管道对象:

    ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class);    MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");    BasicDBList pipeline = new BasicDBList();    String[] multiplier = { "$price", "$quantity" };    pipeline.add(        new BasicDBObject("$group", new BasicDBObject("_id",     new BasicDBObject("month", new BasicDBObject("$month", "$date"))         .append("day", new BasicDBObject("$dayOfMonth", "$date"))         .append("year", new BasicDBObject("$year", "$date")) ) .append("totalPrice", new BasicDBObject(     "$sum", new BasicDBObject(         "$multiply", multiplier     ) )) .append("averageQuantity", new BasicDBObject("$avg", "$quantity")) .append("count",new BasicDBObject("$sum",1))        )    );    BasicDBObject aggregation = new BasicDBObject("aggregate","collection")        .append("pipeline",pipeline);    System.out.println(aggregation);    CommandResult commandResult = mongoOperation.executeCommand(aggregation);

或者,如果所有这些看起来都很麻烦,那么您始终可以使用JSON源进行解析。但是,当然,它必须是有效的JSON:

    String json = "[" +        "{ "$group": { "+ ""_id": { " +     ""month": { "$month": "$date" }, " +     ""day": { "$dayOfMonth":"$date" }, " +     ""year": { "$year": "$date" } " + "}, " + ""totalPrice": { "$sum": { "$multiply": [ "$price", "$quantity" ] } }, " + ""averageQuantity": { "$avg": "$quantity" }, " + ""count": { "$sum": 1 } " +        "}}" +    "]";    BasicDBList pipeline = (BasicDBList)com.mongodb.util.JSON.parse(json);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454383.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号