Допустим, у меня есть коллекция книг, как это:Множественные группа агрегат в MongoDB
{author:"john", category:"action", title:"foobar200"},
{author:"peter", category:"scifi" , title:"42test"},
{author:"peter", category:"novel", title:"whatever_t"},
{author:"jane", category:"novel", title:"the return"},
{author:"john", category:"action", title:"extreme test"},
{author:"peter", category:"scifi", title:"such title"},
{author:"jane", category:"action", title:"super book "}
Я хочу, чтобы сделать запрос, аналогичный:
SELECT author,category, count(*) FROM books GROUP BY category, author
==> Результат:
john -> action -> 2
john -> novel -> 0
john -> scifi -> 0
jane -> action -> 1
etc...
ближайший я был к решению:
db.books.aggregate(
{
$match: {category:"action"}
},
{
$group: { _id: '$author', result: { $sum: 1 } }
}
);
==> результат
{ "_id" : "jane", "result" : 1 }
{ "_id" : "john", "result" : 2 }
{ "_id" : "peter", "result" : 0 }
Но я не могу понять, как выполнить вторую «группу по» категориям.
Каков наилучший способ сделать это?
Благодаря
Вы можете использовать $ проект дальнейшей формы результаты, подобные OP: > 'db.books.aggregate ([{$ group: {_id: {category: '$ category', author: '$ author'}, result: {$ sum: 1}}}, {$ project: {_id: "$ _id.author", result: "$ result"}}]) –
Вы знаете, как я могу проецировать: {autor: 'john', list: {action: 2, scifi: 3, novel: 0}}? –
@AbelChalier Лучше всего опубликовать это как новый вопрос. – JohnnyHK