Mongodb - ROR сортировка с несколькими полями - PullRequest
1 голос
/ 17 октября 2011

Я занимаюсь разработкой сайта в ruby ​​on rails с использованием базы данных mongoDB.Я новичок в mongoDB, и я хочу сортировать данные, используя несколько ключей.Одна из моих коллекций показана ниже.

dd_users
{
   "_id": ObjectId("4e9bcbdb1d41c866c600004e"),   
   "name": "Ram",
   "score":5
    "created_at": ISODate("2011-10-17T06: 31: 55.0Z"),
}
{
   "_id": ObjectId("4e9bcbdb1d41c866c600004f"),   
   "name": "Robert",
   "score":1
   "created_at": ISODate("2011-10-12T06: 31: 55.0Z"),
}
{
   "_id": ObjectId("4e9bcbdb1d41c866c600004g"),   
   "name": "Molly Bracken",
   "score":3
   "created_at": ISODate("2011-10-15T06: 31: 55.0Z"),
}
{
   "_id": ObjectId("4e9bcbdb1d41c866c600005k"),   
   "name": "Ninou-Co France",
   "score":5
   "created_at": ISODate("2011-10-16T06: 31: 55.0Z"),
}

Я хочу отсортировать записи в порядке убывания «показателя» и «созданного».Я использовал запрос mongomapper как 1.DdUser.where ({"name" => {"$ ne" => nil}). Sort ([["score", "desc"], ["made_at", "desc")]]).Но я получаю результат только в порядке оценки.

Я ожидаю результата

{
   "_id": ObjectId("4e9bcbdb1d41c866c600004e"),   
   "name": "Ram",
   "score":5
    "created_at": ISODate("2011-10-17T06: 31: 55.0Z"),
}
{
   "_id": ObjectId("4e9bcbdb1d41c866c600005k"),   
   "name": "Ninou-Co France",
   "score":5
   "created_at": ISODate("2011-10-16T06: 31: 55.0Z"),
}
{
   "_id": ObjectId("4e9bcbdb1d41c866c600004g"),   
   "name": "Molly Bracken",
   "score":3
   "created_at": ISODate("2011-10-15T06: 31: 55.0Z"),
}
{
   "_id": ObjectId("4e9bcbdb1d41c866c600004f"),   
   "name": "Robert",
   "score":1
   "created_at": ISODate("2011-10-12T06: 31: 55.0Z"),
}

Ответы [ 3 ]

3 голосов
/ 08 августа 2012
DdUser.where("name" => { "$ne" => nil } ).sort(["score","desc"], ["created_at","desc"])
0 голосов
/ 08 августа 2012

Немного некро, у меня работает

DdUser.where("name" => { "$ne" => nil } ).sort(:score.desc, :created_at.desc)
0 голосов
/ 17 октября 2011

Лично я не использовал Mongomapper, поэтому приведенный ниже код не проверен:

DdUser.where("name" => { "$ne" => nil } ).sort([:score.desc, :created_at.desc])
...