gpt4 book ai didi

javascript - mongoosejs 如何对不同的查询进行排序?

转载 作者:行者123 更新时间:2023-11-28 19:46:49 24 4
gpt4 key购买 nike

如何对不同的查询进行排序我试过这个

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com