您不能在查找查询中进行这种排序。实际上,您不想对查询结果进行排序,但您想按照 id 数组的顺序检索它们。 您无法在此处定义order_by 规则。查询语言的sort() 方法允许您使用列中的值按升序或降序进行排序。看来这不是你想要做的。
一种解决方案是执行 n 查询以独立检索每条记录并将结果放入数组中。它效率不高,并且需要您编写一些额外的代码来管理来自多个异步调用数据库的数据。
更好的解决方案是使用lodash。 Lodash 带有许多强大的函数来操作集合。执行这种任务是完美的。查看_.sortBy
var filter = [1,5,3];
Country.find({id:filter}, function (err, result) {
sortedResult = _.sortBy(result, function(country) {
return _.indexOf(filter, country.id);
});
res.json(sortedResult);
});
默认为lodash is globally available in sails。
最后,您可以使用纯 JavaScript 实现对结果进行排序:
var filter = [1,5,3];
Country.find({id:filter}, function (err, result) {
result.sort(function(country_a, country_b) {
return filter.indexOf(country_a.id) - filter.indexOf(country_b.id);
})
res.json(result);
});
我通常首先考虑使用 lodash 来执行此类任务,但纯 JavaScript 实现在这里就可以了。无论如何,我认为 lodash 实现仍然更容易阅读,在许多其他情况下,lodash 会给你更多的权力。