2015-09-29 3 views
1

У меня есть коллекция манго с одним из столбцов в виде карты. Например:morphia aggregation отдельные ключи карты

"_id" : ObjectId("5621b"), 
    "creationDate" : ISODate("2015-09-29T14:27:37.451Z"), 
    "comment" : "this is my votes", 
    "attributes" : { 
     "java" : "great", 
     "perl" : "good", 
     "ruby" : "so so", 
     } 
} 

{ 
    "_id" : ObjectId("5621c"), 
    "creationDate" : ISODate("2015-09-29T15:03:25.948Z"), 
    "comment" : "foo", 
    "attributes" : { 
     "perl" : "old fashioned", 
     "java" : "best of all", 
     "bash" : "very usefull", 
     "lisp" : "plan to learn", 
     } 

Я работаю с Java и морфием и хочу, чтобы получить какое-то агрегации

datastore.createAggregation(LanguageComments.class) 
     .group(

, где я могу отчетливый получить все ключи карты атрибутов: Java, Perl, рубин, баш, шепелявила

+0

MongoDB не может перемещаться по клавишам, не прибегая к обработке JavaScript. Вам будет лучше с aa структурой в массиве вроде: '[{" name ":" perl "," value ":" old fashioned "}, {" name ":" java "," value ":" great " }] '. Итак, теперь существует согласованный путь к 'attributes.name', из которого можно получить отдельную информацию. В противном случае вы застряли с mapReduce. Изменение структуры принесет вам большую пользу. –

ответ

0

db.yourcollectionname.distinct («атрибуты») будет приводить к следующему результату для выборочных данных, показанных выше

[ { "Java": "большой", "Perl": "хорошо", "Рубин": "так так" }, { "Perl": "старомодный", «ява ": "лучше всего", "Баш": "очень полезно", "сюсюкать": "план, чтобы узнать" } ]

или вы можете использовать совокупный запрос,

db.yourcollectionname .aggregate ([{$ group: {_ id: '$ attributes'}}])

Это даст вам следующий результат

{ "_id": { "Perl": "старомодный", "ява": "лучше всех", "баш": "очень полезно", " шепелявость»: "план, чтобы узнать"}}

{ "_id": { "ява": "большой", "Perl": "хорошо", "рубин": "так так"}}

Выберите, какой запрос наиболее подходит для вашего сценария, выполните этот запрос и поместите вывод в java-карту.

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