如何将此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(

如何将此mongodb聚合命令转换为java:
给你一个我想要的全球视野;我会提供更多细节;我有一个名为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