Сгладить вложенный объект MongoDB с неизвестными полями

#mongodb #mongodb-query

#mongodb #mongodb-запрос

Вопрос:

Я хочу отменить объект MongoDB, возможно, с помощью агрегации $project, но я точно не знаю, какие поля будут содержаться в объекте. Существует ли какой-либо тип подстановочного знака, который можно было бы использовать для достижения этой цели?

Например.

 { id : ...,
  details: {
            field1: "value", 
            field2: "value"
           }
}
 

Для:

 {
  field1: "value",
  field2: "value 
}
 

Комментарии:

1. вы можете сделать это { field1: "$details.field1", field2: "$details.field2" } на стадии проекта, в противном случае вы можете использовать этап агрегации $replaceRoot.

2. Спасибо за вашу помощь! Я знаю, что я могу спроецировать этот путь на известное поле. Тем не менее, имена полей в этом примере field1 и field2 заранее неизвестны. Поэтому мне нужно что-то вроде #: «$details.#». Я рассмотрю предложение $replaceRoot!

Ответ №1:

В итоге я использовал $replaceRoot, как предложил turivishal . Спасибо!

 {
    $replaceRoot: {
                newRoot: {
                    $mergeObjects: ["$ROOT", "$details"]
                         }
            }
}