繁体   English   中英

使用MongoDB 3.0 Java驱动程序聚合框架时,如何在$ project运算符中使用$ substr表达式

[英]How do I use the $substr expression in $project operator when using MongoDB 3.0 Java Driver aggregation framework

我正在尝试将mongoDB进程集成到Java中,但是无法在使用聚合框架的同时将如何将$ expressions集成到$ project运算符中。 完美运行的Mongo查询是:

db.options.aggregate([{$project:{name:1,lastTradeDate:1,month:{$substr:["$lastTradeDate",4,2]}}},{$out:"Books"}])

将其转换为Java,使我达到了以下(无法运行的)点:

Document expression = new Document("$substr", new Document("lastTradeDate",new int[] {4,2}));
        AggregateIterable iterable = myDocs.aggregate(asList(
                new Document("$project", new Document("name", 1).append("lastTradeDate", 1).append("month", expression)),
                new Document("$group", new Document("_id", "$contSize").append("count", new Document("$sum", 1))));

所以问题是:如何使'expression'真正识别为$ substr类型的表达式?

万一有人遇到同样的问题。 我发现Jongo提供了我所追求的灵活性,而没有直接实现它的复杂方法。

产生的jongo查询如下所示:

Aggregate.ResultsIterator<JongoDoc> jongoProject = JongoColl.aggregate("{$project:{name:1, smonth:{$substr:['$lastTradeDate',4,2]}}}").and("{$out:'Books'}").as(JongoDoc.class);

对于$ project运算符中的$ substr,可以通过以下方式形成查询:

在mongodb中,考虑一个文档:

{
    "_id" : ObjectId("58a09b076560a311779be35f"),
    "name" : "Helen",
    "date" : "12-04-2015",
    "description" : "Committee head"
}

考虑到您只需要从“日期”字段中预测一天。 使用java查询的汇总查询如下:

Document dayExpression = new Document("$substr", Arrays.asList("$date", 0, 2));

AggregateIterable<BasicDBObject> iterable = coll.aggregate(Arrays
                .asList(new Document("$project", new Document("name", 1)
                                .append("description", 1),
                                .append("dayOfDate", dayExpression))));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM