#mongodb #spring-boot #aggregation
#mongodb #весенняя загрузка #агрегирование
Вопрос:
У меня есть набор объектов данных в MongoDB в виде-
[
{ "status" : "passed", "version" : "124" , "value" : 6 },
{ "status" : "passed", "version" : "123" , "value" : 10 },
{ "status" : "failed", "version" : "123" , "value" : 16 }
]
и я хочу получить ее в формате, подобном —
[
{
version: 124,
"series" :[
{
"name" : "passed",
"value" : 6
}
]
},
{
version: 123,
"series" : [
{
"name" : "passed",
"value" : 10
},
{
"name" : "failed",
"value" : 16
}
]
}
]
как я должен написать запрос?
Я написал запрос, подобный
Я написал запрос типа:
Aggregation.group("version").push(new BasicDBObject("name","$status").append("value", "$value")).as("series");
используя приведенный выше агрегированный запрос, я получаю что-то вроде:
[
{
version: 124,
"series" :[
{
"name" : null,
"value" : 6
}
]
},
{
version: 123,
"series" : [
{
"name" : null,
"value" : 10
},
{
"name" : null,
"value" : 16
}
]
}
]
Кажется, что значение статуса не берется в объекте. Как я могу это решить?
Комментарии:
1. Я делаю то же самое, и у меня это хорошо сработало. Какую версию Spring-data-mongodb вы используете?
Ответ №1:
Мой запрос похож:
db.results.aggregate([{
{
"$group": {
"_id": {
"status": "$status",
"version": "$version",
},
"count": {
"$sum": 1
}
}
}, {
$group: {
_id: "$_id.version",
"series": {
$push: {
"status": "$_id.status",
"value": "$count"
}
}
}
}
]);
Поэтому я должен добавить запрос агрегации как:
Aggregation.group("version").push(new BasicDBObject("_id", "$_id.status").append("value", "$value")).as("series");
Ответ №2:
Я пробовал с агрегацией mongo. Попробуйте в командной строке. Я не знаком с spring.
db.getCollection('Test1').aggregate([
{
$group:{
_id:"$version",
version:{$first:"$version"},
series:{
$push:{
name:"$status",
value:"$value"
}
}
}
},
{$project:{_id:0}}
])
Комментарии:
1. Спасибо за ваш ответ, но мне нужен запрос spring boot MongoDB.