SailsJS对填充数据执行排序

时间:2017-04-03 06:27:50

标签: node.js mongodb sails.js waterline sails-mongo

以下是我当前的事件模型

module.exports = {
    attributes: {
        name: {
            type: 'string',
            required: true,
            unique: true
        },
        client: {
            model: 'client',
            required: true
        },
        location: {
            model: 'location',
            required: true
        }
    }
};

客户端型号:

module.exports = {
    attributes: {
        name: {
            type: 'string',
            required: true,
            unique: true
        },
        address: {
            type: 'string'
        },
        clientContact: {
            model: 'user',
            required: true
        }
    }
};

那么如何基于 client name 实现排序,并且还有 skip limit < / em>属性(用于分页)与它一起工作。

我尝试使用以下查询:

Event.find({ id: ['583eb530902db3d926345215', '583eb6dd91b972ee26dd97b1'] },
           { select: ['name', 'client'] })
           .populate('client', { sort: 'name DESC' })
           .exec((err, resp) => resp.map(r => console.log(r.name, r.client)));

但这似乎没有。

1 个答案:

答案 0 :(得分:2)

Waterline不支持按照这样的子记录对结果进行排序。如果client是附加到事件的子记录的集合,则您的代码会按名称对每个返回的Event记录的已填充client数组进行排序,但我假设在这种情况下client是一个单一的关联(即model: 'client')。

如果你想要的是按客户名称排序的Event个记录数组,你可以在检索记录后使用Lodash相对容易地做到这一点:

var _ = require('lodash');

Event.find(queryCriteria).populate('client').exec((err, resp) => {
  if (err) { /* handle error */ }
  var sortedRecords = _.sortBy(eventRecords, (record) => { return record.client.name; });
});