Bhushankumar Lilapara
Bhushankumar Lilapara

Reputation: 780

How can I sort data in descending order using sails-js?

I want my data sort by "createdAt" column . Sometime in ascending order and also descending order also. I am using mongo db .

Currently, I have created app which have feature like Users data can be sorted by admin request. Admin can view data in ascending order or by descending order.

I have tried option by using sort parameter which gives me data every time in same order. How can I change as admin per admin request.

Please review below that I have tried.

var options = {
    limit: request.body.limit || undefined,
    skip: request.body.skip || undefined,
    sort: request.body.sort || "createdAt",
    where: request.body.where  || undefined
};

Users.find(options, function (err, Users) {
    if (Users === undefined) {
        return response.json({message: "No data Found"});
    }
    else if (err) {
        return response.json({message: err});
    } else {
        return response.json({data: Users});
    }
});

Upvotes: 0

Views: 4350

Answers (5)

Akbor
Akbor

Reputation: 1358

in my case working code below

var posts =Posts.find();
    posts.sort('createdAt DESC');
      posts.exec(function(err, success) {
        if(err) {
            res.status(500);
            return res.view('500', {data: err});
        }
        res.json(success)
    })

Upvotes: 0

Mandeep Singh
Mandeep Singh

Reputation: 8234

Better to use promises. Keep the code simple and easy to understand.

let condition = {
    someField: 'value',
    someOtherField: 'value'
}

let limit = 10;
let skip = 10;

Users.find(condition)
.limit(limit)
.skip(skip)
.sort({createdAt: 1})
.then(result => {
    // do whatever you need to do with the result here
    console.log(result)
})

For descending sort, change the sort clause to

.sort({createdAt: 0})

Upvotes: 0

shuboy2014
shuboy2014

Reputation: 1370

try this

var myQuery = Users.find(options);

// if you want to sort in descending order 
myQuery.sort('createdAt DESC');

// if you want to sort in ascending order 
myQuery.sort('createdAt ASC')

myQuery.exec(function callBack(err,results){
    console.log(results)
});

Upvotes: 2

Bhushankumar Lilapara
Bhushankumar Lilapara

Reputation: 780

var options = {
    limit: request.body.limit || undefined,
    skip: request.body.skip || undefined,
    sort: request.body.sort || "createdAt desc", // Please mention here, desc or asc followed by space with     column name
    where: request.body.where  || undefined
};

Users.find(options, function (err, Users) {
    if (Users === undefined) {
        return response.json({message: "No data Found"});
    }
    else if (err) {
        return response.json({message: err});
    } else {
        return response.json({data: Users});
    }
});

Upvotes: 0

singuerinc
singuerinc

Reputation: 487

You have to do something like this:

.sort({ createdAt: 'desc' })

In your case:

var options = {};
options[request.body.sort || "createdAt"] = 'desc'; // or 'asc'    

Upvotes: 0

Related Questions