sails.js中未排序的结果集

sails.js中未排序的结果集,sails.js,waterline,Sails.js,Waterline,是否可以获取一个查找查询,并以无序方式返回结果集。我有一个具有以下数据集的表 Id Country 1 Germany 2 Japan 3 China 4 England 5 USA 在触发以下查询时 Country.find({id:[1,5,3]}, function (err, result) { res.json(result); }); 我明白了 1 Germany 3 China 5 USA 是否有方法关闭基于id的默认排序,并按以下预期顺序设

是否可以获取一个查找查询,并以无序方式返回结果集。我有一个具有以下数据集的表

Id  Country
1   Germany
2   Japan
3   China
4   England
5   USA
在触发以下查询时

Country.find({id:[1,5,3]}, function (err, result) { 
  res.json(result);
});
我明白了

1  Germany
3  China
5  USA
是否有方法关闭基于id的默认排序,并按以下预期顺序设置查询结果

1  Germany
5  USA
3  China

您不能在find查询中进行这种排序。实际上,您不希望对查询结果进行排序,但希望按照ID数组的顺序检索它们这里没有您可以定义的
排序规则
。查询语言的
sort()
方法允许您使用列中的值按升序或降序进行排序。看来这不是你想要做的

一种解决方案是进行n次查询以独立地检索每个记录,并将结果放入数组中。这样做效率不高,需要编写一些额外的代码来管理来自对数据库的多个异步调用的数据


更好的解决办法是使用。Lodash提供了许多强大的函数来操作集合。这是完美的执行这种任务。查看

var过滤器=[1,5,3];
Country.find({id:filter},函数(err,result){
sortedResult=\ uu.sortBy(结果、函数(国家/地区)){
返回u.indexOf(过滤器,国家/地区id);
});
res.json(sortedResult);
});
默认情况下


最后,您可以使用纯JavaScript实现对结果进行排序:

var过滤器=[1,5,3];
Country.find({id:filter},函数(err,result){
结果.排序(功能(国家/地区a、国家/地区b){
返回filter.indexOf(国家/地区id)-filter.indexOf(国家/地区id);
})
res.json(结果);
});

我通常首先考虑使用lodash来执行这类任务,但是这里的纯JavaScript实现很好。无论如何,我认为lodash实现仍然更易于阅读,在许多其他情况下,lodash将为您提供更多功能。

谢谢您的回答。只是好奇,既然我可以使用sort is查询语言,为什么我需要使用lodash进行排序。我更新了答案并添加了另一个命题。我希望它更清楚:)谢谢你。感谢你的努力。