2013-04-02 1 views
5

Я нахожу структуру агрегации mongodb чрезвычайно мощной - кажется, что это хорошая возможность сгладить объект. Моя схема использует массив вспомогательных объектов в массиве, называемом материалами. Количество материалов является переменной, но конкретное поле (категория) будет уникальным для объектов в массиве. Я хотел бы использовать структуру агрегации для сглаживания структуры и динамического переименования полей на основе значения поля категории. Я не мог найти простой способ выполнить это, используя $ project вместе с $ cond. Есть ли способ?Механизм агрегации MongoDB - переименование динамического поля

Причиной массива материальных объектов состоит в обеспечении возможности простого поиска:

например, {'materials.name': 'XYZ'} отбрасывает любой документ, в котором найден XYZ.

E.g. до и после того, как документ

{ 
"_id" : ObjectId("123456"), 
"materials" : [ 
    { 
     "name" : "XYZ", 
     "type" : "Red", 
     ... 
     "category" : "A" 
    }, 
    { 
     "name" : "ZYX", 
     "type" : "Blue", 
     ... 
     "category" : "B" 
    }] 
} 

в

{ 
"material_A_name" : "XYZ", 
"material_A_type" : "Red", 
... 
"material_B_name" : "ZYX", 
"material_B_type" : "Blue", 
... 
} 
+0

Ваш документ 'after' недействителен JSON – JohnnyHK

+0

Спасибо, обновлено - это была ошибка при создании макета в моем редакторе – user2234151

+0

Хорошо, я вижу, что вы пытаетесь сделать сейчас. Поддержка динамически сгенерированных ключей в структуре agg не поддерживается, поэтому я не вижу, как вы могли бы это сделать. Возможно, вам придется просто отправить результат обработки кода, чтобы сделать это. – JohnnyHK

ответ

5

Существует запрос на что-то подобное в JIRA https://jira.mongodb.org/browse/SERVER-5947 - проголосуйте за него, если вы хотели бы иметь эту функцию.

Между тем, если вы знаете заранее, какие возможные значения ключей будут (то есть все уникальные значения «категории»), у вас есть пример, и у меня есть пример кода on my blog.

+0

Обратите внимание, что возможность переноса ключей в значения и наоборот была доступна с версии MongoDB 3.4.4. –

 Смежные вопросы

  • Нет связанных вопросов^_^