使用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"
}
考虑一下,您只需要从 "date" 字段中投影一天。使用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))));
我正在尝试将 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"
}
考虑一下,您只需要从 "date" 字段中投影一天。使用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))));