如何对不同的查询进行排序 我试过这个
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":["普米族"]},{" _id":["普米族"" Secondi"]},{" _id":[" Dolci的"]},{" _id":[" Secondi"]} ]
答案 0 :(得分:3)
它不会.sort()
,因为它不会返回光标。 .distinct()
方法是mapReduce的一个包装,与返回游标的.find()
命令的结果不同。
所以甚至比使用聚合框架更好:
Article.aggregate(
[
{ "$unwind": "$categories" },
{ "$group": { "_id": "$categories" },
{ "$sort": { "categories": 1 }
],
function(err,result) {
// work here
}
);
输出略有不同,但整体结果应该更快一些并且排序。
您也可以在作为来自distinct方法的响应返回的数组上使用JavaScript .sort()
方法,就像您可以使用JavaScript .map()
方法去除&#一样34;值"来自聚合结果对象中的_id
个键。
仍然说.aggregate()
方法应该比.distinct()
更好,因为服务器上的实现是本机代码而不是JavaScript并且已解释。