Весной монгодб раскручивается на вложенном поле - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь запустить агрегационный запрос, когда пытаюсь развернуть массив, вложенный в ключ customFields.

Структура выглядит следующим образом

{
    "note" : {
        "customFields" : {
            "externalAttendees" : [ 
                {
                    "email" : "someemail@domain.com",
                    "epp" : null
                }, 
                {
                    "email" : "anotheremail@domain.com",
                    "epp" : null
                }
            ]
        }
    }
}

customField - Карта типа строки,Объект.Когда я пытаюсь размотать note.customFields.externalAttendees , то получаю ошибку Не найдено свойство externalAttendees для типа Object!Пройденный путь: Activity.note.customFields.

С другой стороны, если я раскручиваю поле, которое представляет собой массив конкретных объектов, таких как List, где класс User имеет электронную почту и epp в качестве переменной экземпляра, тогда яне получаю никаких исключений.

Есть ли способ отмотать динамические ключи, которые не являются частью bean-компонента, но доступны в документе.

Я использую агрегирование базы данных springMongoData.

1 Ответ

0 голосов
/ 07 марта 2019

Похоже, структура документа должна иметь точно такое же представление Java.Как и в моем случае, externalAttendees, по которым я группировался, является частью Map, а не переменной экземпляра bean-компонента.

Я попытался выполнить executeCommand (BasicDBObject.parse (stringJson)) из MongoTemplate, и это решило задачу.

моя строкаJson будет выглядеть как

{ "aggregate" : "__collection__" , "pipeline" : [ { "$match" : { "note.customFields.externalAttendees" : { "$exists" : true}}} , { "$match" : { "note.customFields.externalAttendees.name" : { "$in" : [ "x" , "y"]}}} , { "$sort" : { "createdDate" : -1}} , { "$unwind" : "$note.customFields.externalAttendees"} , { "$project" : { "id" : 1 , "emailId" : "$note.customFields.externalAttendees.name" , "aType" : "$note.type" , "subject" : "$note.subject"}} , { "$group" : { "_id" : "$emailId" , "type" : { "$first" : "$aType"} , "subject" : { "$first" : "$subject"}}}],"cursor": {"batchSize":10}}
...