Не работает операция отправки данных MongoDB с несколькими полями

#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.