如何将此mongodb聚合命令转换为java代码
如何将此mongodb聚合命令转换为java:如何将此mongodb聚合命令转换为java代码,java,mongodb,vert.x,Java,Mongodb,Vert.x,如何将此mongodb聚合命令转换为java: 给你一个我想要的全球视野;我会提供更多细节;我有一个名为Finance的集合,在这个集合中有许多不同类型的文档;我只想要类型为expenses:{type:expenses}的文档,因此,类型为expenses的文档有一个名为bunded_date的字段;它是以毫秒为单位的,而且这些文档有一个名为price的字段。我想在每个月的价格总额!因此,我需要将这些毫秒转换为日期,以便能够使用$month重新组合它 db.Finance.aggregate(
给你一个我想要的全球视野;我会提供更多细节;我有一个名为Finance的集合,在这个集合中有许多不同类型的文档;我只想要类型为expenses:{type:expenses}的文档,因此,类型为expenses的文档有一个名为bunded_date的字段;它是以毫秒为单位的,而且这些文档有一个名为price的字段。我想在每个月的价格总额!因此,我需要将这些毫秒转换为日期,以便能够使用$month重新组合它
db.Finance.aggregate([ { $match : { type : "Expenses" } } ,{
"$project": {
"bought_date": {
"$add": [ new Date(0), "$bought_date" ]
},
"msisdn": 1
}
},
{
"$group" : {
"_id" : {
"bought_date" : "$bought_date",
"msisdn":"$msisdn"
},
"msisdnCount" : { "$sum" : 1}
}
}
]);
我试过这个:
JsonObject first_match=new JsonObject()
.put("type", "Expenses");
JsonObject project=new JsonObject()
.put("bought_date", new JsonObject()
.put("$add",new JsonArray()
.add(new Date(0))
.add("$bought_date")))
.put("msisdn", 1);
JsonObject project_sec=new JsonObject()
.put("month",new JsonObject().put("$month","$bought_date"))
.put("msisdn", 1)
.put("bought_date", 1);
JsonObject group=new JsonObject()
.put("_id","$month")
.put("price",new JsonObject()
.put("$sum","price"));
JsonArray pipeline=new JsonArray()
.add(new JsonObject().put("$match", first_match))
.add(new JsonObject().put("$project", project))
.add(new JsonObject().put("$project", project_sec))
.add(new JsonObject().put("$group", group));
JsonObject command = new JsonObject()
.put("collection", "Finance")
.put("pipeline",pipeline)
.put("explain",false);
//使用RunCommand
client.runCommand("aggregate",command, results -> { ...
但看起来我不能在JsonArray中添加日期
JsonObject中的非法类型:类java.util.Date
如果有人遇到同样的问题,解决方案是:我的问题是new Date0,它不是一种可以添加到JsonObject的类型,所以我改为使用:new JsonObject。put$date,1970-01-01T00:00:00Z在$add聚合函数中只能使用一个日期。要添加新日期(例如today date),请查找today date new date.getTime的时间戳。并添加到列表中
BasicDBObject basicDBObject=new BasicDBObject();
Date date1=new Date();
List list=new ArrayList();
list.add("$date_achat");
list.add(date1.getTime());
Document project = new Document("$project", new Document("date_achat",new Document("$add",list)).append("msisdn", 1));
List<Document> agglist = new ArrayList<Document>();
agglist.add(project);
------------java中的解决方案-----------------
以下是java代码:
List list = new ArrayList();
list.add(new Date(0));
list.add("$bought_date");
Document match = new Document("$match", new Document("type", "Expenses"));
Document project = new Document("$project", new Document("bought_date", 1).append("msisdn", 1).append("date_formatted", new Document("$add", list)));
Document group = new Document("$group", new Document("_id", new Document("$month", "$date_formatted")).append("msisdncount", new Document("$sum", "$msisdn")));
List<Document> agglist = new ArrayList<Document>();
agglist.add(match);
agglist.add(project);
agglist.add(group);
给你一个我想要的全球视野;我会提供更多细节;我有一个名为Finance的集合,在这个集合中有许多不同类型的文档;我只想要类型为expenses:{type:expenses}的文档,因此,类型为expenses的文档有一个名为bunded_date的字段;它是以毫秒为单位的,并且这些文档有一个名为price的字段。我想在每个月的价格总额!因此,我需要将这些毫秒转换为日期,以便能够使用$month重新组合它!基本上,您希望通过使用GROUPBY将$BUYED_日期聚合一个月来计算出总价格{$match:{type:expences}}。如果我错了,请纠正我。您首先在文档中添加一个字段作为月份,方法是执行{$month:$bunded_date},然后按$month分组。我会在JavaUpdate中分享解决方案。欢迎:谢谢你真是个笨蛋!它对我不起作用,因为我的问题是new Date0不是一个可以添加到JsonObject的类型,所以我改为使用这个新的JsonObject。put$date,1970-01-01T00:00:00Z