【问题标题】:mongoosejs how to sort a distinct query?mongoosejs 如何对不同的查询进行排序?
【发布时间】:2014-07-30 22:25:50
【问题描述】:

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

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":[ "第二"]}]

【问题讨论】:

  • 应该给我留言。幸运的是我看到了这个,但是有一个编辑,我可能应该问你这些是否真的是数组。他们通常是

标签: javascript node.js mongodb mongoose aggregation-framework


【解决方案1】:

它不会.sort(),因为它不返回游标。 .distinct() 方法是对 mapReduce 的一种包装,与返回游标的 .find() 命令的结果不同。

所以使用聚合框架比这更好:

Article.aggregate(
    [
        { "$unwind": "$categories" },
        { "$group": { "_id": "$categories" },
        { "$sort": { "categories": 1 }
    ],
    function(err,result) {

       // work here
    }
);

输出有点不同,但整体结果应该更快一些并且排序。

您也可以在数组上使用 JavaScript .sort() 方法,该数组作为 distinct 方法的响应返回,就像您可以使用 JavaScript .map() 方法从 @ 中删除“值”一样987654327@ 聚合结果对象中的键。

仍然说.aggregate() 方法应该比.distinct() 工作得更好,因为服务器上的实现是本机代码而不是 JavaScript 和解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 2018-12-08
    • 1970-01-01
    相关资源
    最近更新 更多