2014-02-06 1 views
0

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

Мои документы структурированы следующим образом:

type : artist, 
artist : David Bowie, 
song : "Starman" 

Например, как часть моей агрегации Я хочу, чтобы сгруппировать все «типы» и иметь карту, содержащую имя художников, как ключ и песни в качестве значения , Для выхода типа:

[_id : artist, myMap : ["David Bowie" : "Starman"]] 

Но я не уверен, что это возможно. Я пробовал использовать Mongos $ push, но мне не нравится, когда я пытаюсь нажать карту. Кто-нибудь пытался это сделать раньше?

Heres запрос я пробовал:

db.music.aggregate(
       { 
        $group: { 
          _id: "$type", 
          myMap : { $push: {"$artist" : "$song" }} 
          } 
       } 
      ) 
+0

Это может быть близко к чему вы ищете: 'db.music.aggregate ( \t {$ Проект: { \t \t" Тип ": 1, \t \t Foo: { "художник": "$ художник", "песня": "$ песня"} \t}}, \t {$ группа: { \t \t "_id":" $ тип ", \t \t "map": {$ push: "$ foo"} \t}} ) ' –

+0

@orid Спасибо .. Отметьте это как ответ, и я соглашусь. Прекрасно работает – Travis

ответ

1

Это может быть близко к тому, что вы ищете:

db.music.aggregate( 
    {$project : 
     { 
      "type" : 1, 
      foo : { "artist" : "$artist" , "song" : "$song"} 
     } 
    }, 
    {$group : 
     { "_id" : "$type", "map" : {$push: "$foo" }} 
    } 
) 
0

Я думаю, что вы не можете сделать это с MongoDB. Но есть Jira Ticket с просьбой об этой функции.