У меня есть типичное веб-приложение, в котором я пытаюсь создать грани из коллекции mongodb. В настоящее время это выполняется с использованием структуры агрегации с использованием драйвера Java (v2.10.1). Грани генерируются правильно, за исключением документов, содержащих подмассивов, за исключением, например, У меня есть следующие JSON документов:Агрегация Mongodb на Json Array (JAVA)
{name: polo, fueltypes:[benzin, lpg], color: black}
{name: golf, fueltypes:[benzin, cng], color: blue}
{name: a4, fueltypes:[diesel], color: blue}
Возвращаемый набор результатов :
имя:
{_id: polo, count: 1}
{_id: golf, count: 1}
{_id: a4, count: 1}
цвет:
{_id: black, count: 1}
{_id: blue, count: 2}
fueltypes:
{_id: [benzin,lpg,cng,diesel], count: 3}
Суммарный результат поля fueltypes содержит все поля массива.
Однако желаемый результат должен быть:
fueltypes:
{_id: benzin, count: 2}
{_id: lpg, count: 1}
{_id: diesel, count: 1}
{_id: cng, count: 1}
и соответствующий код Java:
String str = "name" ; //or fueltypes, color
// create match
BasicDBObject match = new BasicDBObject();
match.put("$match", new BasicDBObject());
// build the $projection operation
DBObject fields = new BasicDBObject();
// fields.put("count", 1);
DBObject project = new BasicDBObject();
// Now the $group operation
DBObject groupFields = new BasicDBObject();
DBObject unwindFields = new BasicDBObject();
// build the $projection operation
fields.put(str, 1);
project.put("$project", fields);
// Now the $group operation
groupFields.put("_id", "$" + str);
// performing sum and storing it in the count attribute
groupFields.put("count", new BasicDBObject("$sum", 1));
DBObject group = new BasicDBObject("$group", groupFields);
AggregationOutput output = serviceCollection.aggregate(match, project, group);