Я пытаюсь получить первую из каждой группы, тогда мне нужно отсортировать результаты. Я достиг первой части, но не смог сортировать результат. Вот то, что я попыталсяРезультаты сортировки группы mongodb
образца данных
{
"_id" : ObjectId("57f549e1831529409b000001"),"name" : "book1","author" : "abc","revision" : 1.0,
"published_on" : ISODate("2016-10-05T18:43:45.902Z"),"publisher" : "newpublisher"
},
{
"_id" : ObjectId("57f54a4483152940ad000001"),"name" : "book1","author" : "a1","revision" : 1.1,
"published_on" : ISODate("2016-10-05T18:45:24.436Z"), "publisher" : "newpublisher"
},
{
"_id" : ObjectId("57f54baa83152940c3000001"), "name" : "oldbook", "author" : "alice","revision" : 1.0,
"published_on" : ISODate("2016-10-05T18:51:22.484Z"),"publisher" : "newpublisher"
},
{
"_id" : ObjectId("57f54c4983152940c3000002"),"name" : "artoflearning","author" : "mike","revision" : 1.0,
"published_on" : ISODate("2016-10-05T18:54:01.585Z"),"publisher" : "oldpublisher"
},
{
"_id" : ObjectId("57f54c5883152940c3000003"),"name" : "artoflearning","author" : "mike","revision" : 1.1,
"published_on" : ISODate("2016-10-05T18:54:16.568Z"),"publisher" : "oldpublisher"
},
{ "_id" : ObjectId("57f54c6583152940c3000004"),"name" : "artoflearning","author" : "mike","revision" : 1.2,
"published_on" : ISODate("2016-10-05T18:54:29.848Z"),"publisher" : "oldpublisher"
},
{ "_id" : ObjectId("57f5513f8315294116000000"),"name" : "learning","author" : "mike","revision" : 2.0,
"published_on" : ISODate("2016-10-05T19:15:11.342Z"),"publisher" : "newpublisher"
}
Я получаю последнюю версию (сортировка по пересмотру в Desc) группу по имени для данного издателя. Я использовал этот запрос для достижения
Book.collection.aggregate([
{'$match' => {"publisher"=>"newpublisher"}},
{'$sort' => {'revision' => -1}},
{'$group' => {'_id' => '$name',
'revision' => {'$first' => '$revision'},
'id' => {'$first' => '$_id'},
'name' => {'$first' => '$name'},
'published_on' => {'$first' => '$published_on'},
'publisher' => {'$first' => '$publisher'}
}
},
{'$project' => {'_id' => '$id',
'revision' => '$revision',
'name' => '$name',
'published_on' => '$published_on',
'publisher' => '$publisher'
}
},
{'$skip' => 1},
{ '$limit' => 10 }
])
Так как мне нужен результат с разбивкой по страницам, я применил пропуск и ограничение. я получил этот результат
{"_id"=>{"$oid"=>"57f54a4483152940ad000001"}, "revision"=>1.1, "name"=>"book1", "published_on"=>"2016-10-05T18:45:24.436Z", "publisher"=>"newpublisher"},
{"_id"=>{"$oid"=>"57f5513f8315294116000000"}, "revision"=>2.0, "name"=>"learning", "published_on"=>"2016-10-05T19:15:11.342Z", "publisher"=>"newpublisher"}
Теперь я хотел бы сортировать по имени «» или «» published_on столбцов. Когда я пытаюсь применить это на результат сверху, я получаю ошибку
Пожалуйста посоветуйте
добавляет '{'$ sort' => {'name' => 1}}' в конце вашего конвейера не работает? – Rafael
@ Рафаэль, да, это сработало. Как получить общее количество сгруппированных результатов – user2624242