Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Mongodb, how do I first sort by score, then sort by time if there is a "tie"?

results = docDB.posts.find({"active":True }).sort("pop_score", pymongo.DESCENDING)

This is my sort right now. But the problem is, some things have the same "score". In that case, if they tie, I want them to sort by "time" within the ones who tied.

How do I do that? It's possible to do that in Mysql...

like image 255
TIMEX Avatar asked Feb 09 '11 00:02

TIMEX


People also ask

How do I sort a date string in MongoDB?

We can sort the data using the aggregation method, aggregation method is very useful to sort the date field in ascending or descending order. We can also use order by operator to sort the date type field documents in MongoDB. While using any operator we need to specify the value of ascending or descending order.

How do you arrange data in ascending and descending order in MongoDB?

Ascending/Descending SortSpecify in the sort parameter the field or fields to sort by and a value of 1 or -1 to specify an ascending or descending sort respectively. When comparing values of different BSON types, MongoDB uses the following comparison order, from lowest to highest: MinKey (internal type)


1 Answers

You can sort by more than one attribute at a time. e.g.

sort({name : 1, age : -1})

will sort by name ascending then by age descending

See here for reference: http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order

Edit:

In pymongo, that would be

.sort([['name', pymongo.ASCENDING], ['age', pymongo.DESCENDING]])

referenceL http://api.mongodb.org/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor.sort

like image 162
Charles Ma Avatar answered Nov 15 '22 20:11

Charles Ma