[英]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.