I have been writing a small node application and part of the query is sorting by the number of likes an object has, like this :
likes : { num: { type: Number, default: 0 }, IDs:[Number]...
and the sort query:
Object.find().sort({likes : 'desc'};).execFind(function(err, confessions){...
this doesnt sort by the number of likes (like I would like it to) instead it sorts by the most recently liked object.
How would I sort by likes.num? I cant seem to get it to work...
EDIT: Heres a mongo doc as requested
{ __v: 0,
_id: 51703a470ef8e60000000002,
name: 'Name',
text: ' this is a fresh submission for mongo to hold',
comments: { commentData: [], num: 0 },
removed: false,
time: Thu Apr 18 2013 11:24:07 GMT-0700 (PDT),
likes: { IDs: [ 100001810858894 ], num: 1 },
dislikes: { IDs: [ 100001810858894 ], num: 1 } }
EDIT: Heres the whole query
exports.index = function (req, res) {
console.log(req.user);
var sortParams;
var sort = req.params.sortingMethod;
console.log(sort);
if (sort == 'newest'){
sortParams = { time : 'asc'};
} else if (sort == 'oldest'){
sortParams = { time : 'desc'};
} else if (sort == 'likes'){
sortParams = {likes.num : 'desc'};
} else if (sort == 'dislikes'){
sortParams = {dislikes.num :'desc'};
} else {
sortParams = { time : 'desc'};
}
console.log(sortParams);
Confession.find().sort(sortParams).execFind(function(err, confessions){...
You are getting the results sorted by object's value - the problem is that the object is the full JSON document. What you actually want is sorting by value of the specific field within the object, in your case that would be "likes.num"
The quotes are to be included in the query:
{"likes.num":-1}
The answer was to wrap the query parameters in quotes like Linda Quin suggested
sortParams = {'likes.num' : 'desc'};