How to sort collections in Meteor
10-06-2015 (d-m-Y)
I thought it's clear how to sort collections in Meteor, but it isn't for beginners. MongoDB uses $orderby operator for sorting and Meteor uses sort operator. It might not be clear how to use sort operator in Meteor from its docs.
Let's say we have a collection named Messages:
Messages = new Mongo.Collection('messages');
The schema of the collection looks like this:
{
_id: String,
text: String,
username: String,
timestamp: Number
}
Then we want to publish messages with limit and sort operator/option:
Meteor.publish('messages', function(limit) {
return Messages.find({}, {
limit: limit || 5,
sort: { timestamp: -1 }
});
});
sort: { timestamp: -1 } option means that we sort messages by timestamp in descendant order. If we wanted to sort messages by timestamp in ascendant order, we would use sort: { timestamp: 1 }.
Call subscribe on the client:
Meteor.subscribe('messages', 10); //subscribe 10 messages
Write a helper that returns sorted messages. It's not enough to call Messages.find(); because it would not sort messages by timestamp:
Template.messages.helpers({
messages: function () {
return Messages.find({}, {
sort: { timestamp: -1 }
});
}
});
Now just show messages in a template:
<template name="messages">
{{#each messages}}
<p>{{username}}: {{text}}</p>
{{/each}}
</template>
That's all. I have created a chat application which you can clone and play with it: https://github.com/Elfoslav/meteor-chat-tutorial
Learn more about using MongoDB in Meteor in this video: https://www.youtube.com/watch?v=TOBex9L5Acs&index=8&list=PLoy-bs-bDKThDssbowaKGqaD_rneci8rd
← All articles | If you want to know about new blogposts you should follow @elfoslav