получить отличительные значения с отсортированными данными - PullRequest
14 голосов
/ 21 января 2011

Мне нужен запрос, чтобы получить отдельные ключи с сортировкой на основе оценки в Mongodb 1.6.5

У меня есть записи, как

{key ="SAGAR"
score =16
note ="test1"
}

{key ="VARPE"
score =17
note ="test1"
}

{key ="SAGAR"
score =16
note ="test2"
}

{key ="VARPE"
score =17
note ="test2"
}

Мне нужен запрос, который сортирует все записи по счету и возвращает мне отдельный ключ .....

Ответы [ 2 ]

12 голосов
/ 11 августа 2014

Вы можете использовать структуру агрегации для группировки по элементу, который вы хотите выделить (группа выделяет его).Поэтому, если вы хотите отсортировать по количеству баллов, то получить отдельные ключи, вы можете сделать следующее - отсортировать по баллу, сгруппировать по ключу и добавить счет в виде массивов элементов (уже отсортированы):

db.test.aggregate([
    { $sort : { score : -1 } },
    { $group : {_id : "$key", scores : { $push : "$score" } } }
])

Это приведет котдельные ключи вместе с массивом баллов, которые представляют собой те баллы, которые содержатся в документах с дубликатами ключей.Я не уверен, что это именно то, что вы ищете, и я знаю, что это старый вопрос, но я подумал, что это может помочь кому-то еще, глядя на него в будущем - как альтернативный способ сделать это.

2 голосов
/ 21 января 2011

В mongodb есть отдельная команда :

Вы можете использовать разные как это:

db.test.distinct({"key":true,"score":true,"note":true}); 

то же самое в реляционной базе данных:

SELECT DISTINCT key,score,note FROM test; 

И чем отсортировать результат , добавив следующий код:

.sort({score : 1}) // 1 = asc, -1 = desc

Общий результат будет таким:

 db.test.distinct({"key":true,"score":true,"note":true}).sort({score : 1}); 
...