У меня есть list
из MainItem
объектов, как показано ниже
[
{
"_id":"5ee40defc4b47b54a223120f",
"name":"Item 1",
"subItems":[
{
"_id":"111",
"name":"cat One name",
"description":"cat item description"
},
{
"_id":"222",
"name":"cat Two name",
"description":"cat item description"
}
]
},
{
"_id":"5ee40defc4b47b54a223120f",
"name":"Item 1",
"subItems":[
{
"_id":"333",
"name":"cat Three name",
"description":"cat item description"
},
{
"_id":"222",
"name":"cat Two name",
"description":"cat item description"
}
]
},
{
"_id":"5ee40defc4b47b54a223120f",
"name":"Item 1",
"subItems":[
{
"_id":"333",
"name":"cat Three name",
"description":"cat item description"
},
{
"_id":"111",
"name":"cat One name",
"description":"cat item description"
}
]
}
]
То, что я пытаюсь сделать, это поиск по имени subItem
. Итак, если выполнить поиск типа «кошка Th», мой результат должен быть таким, как показано ниже (должен возвращать список из SubItem
списков, соответствующих имени),
[
{
"_id":"333",
"name":"cat Three name",
"description":"cat item description"
}
]
Мне нужно сделать это с помощью mongoTemplate, и это тот, который я использую для получения результата,
mongoTemplate.getCollection(mongoTemplate.getCollectionName(MainItem.class)).distinct("subItems", new BasicDBObject("subItems.name", new BasicDBObject("$regex", "^cat Th")), BasicBSONObject.class).into(new ArrayList<>())
Вместо того, чтобы получить соответствующий подэлемент в списке, я получаю все отдельные подэлементы. Что я здесь делаю неправильно?
(Один и тот же подэлемент может находиться в разных списках основных элементов, в этих сценариях должны быть разные подэлементы с соответствующим именем)
MongoTemplate#aggregate
. Агрегация будет иметь$project
для фильтрации ($filter
оператора массива агрегации) массиваsubItems
и$group
для получения отдельных значений. Это ссылка на документацию для данных Spring. Платформа агрегации MongoDB. - person prasad_   schedule 13.06.2020