如何对不同的查询进行排序 我试过这个
exports.categories = function(req, res) {
Article.distinct({'categories' : true}).sort({'categories': 1}).exec(function(err, categories) {
if (err) {
return res.json(500,{ error: 'Cannot get the categories' });
}
res.json(categories);
});
};
但它不起作用。
更新
@Neil Lunn 的回复
exports.categories = function(req, res) {
Article.aggregate(
[
{ '$group': { '_id': '$categories' }},
{ '$sort': { 'categories': 1 }}
])
.exec(function(err,categories) {
if (err) {
return res.json(500, err);
}
res.json(categories);
});
};
但我有这样的
[{"_id":["Primi"]},{"_id":["Primi","Secondi"]},{"_id":["Dolci"]},{"_id":["Secondi"]}]
最佳答案
它不会.sort()
,因为它不返回游标。 .distinct()
方法是一种 MapReduce 的包装器,与返回游标的 .find()
命令的结果不同。
因此,使用聚合框架比这更好:
Article.aggregate(
[
{ "$unwind": "$categories" },
{ "$group": { "_id": "$categories" },
{ "$sort": { "categories": 1 }
],
function(err,result) {
// work here
}
);
输出略有不同,但总体结果应该更快一些并且已排序。
您还可以在作为不同方法的响应返回的数组上使用 JavaScript .sort()
方法,就像您可以使用 JavaScript .map 一样()
方法从聚合结果对象的 _id
键中去除“值”。
仍然说 .aggregate()
方法应该比 .distinct()
更好,因为服务器上的实现是 native 代码,而不是 JavaScript 和解释的。
关于javascript - mongoosejs 如何对不同的查询进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136224/