如何使用Mongoose对“自动神奇”进行排序?

时间:2014-01-02 23:30:52

标签: node.js mongodb sorting mongoose

说我有这样的网址:

http://dev.myserver.com/systems?system_type.category=Penetration

命中以下控制器:

exports.findAll = function(req, res) { 
    System.find(req.query, function(err, systems) {
        res.send(systems);
    });
};

然后使用Node,Express,MongoDB和Mongoose返回'auto-magically'下面的集合:

[{
    "_id":            "529e5f29c128685d860b3bad",
    "system_number":  "123",
    "target_country": "USA",
    "system_type":     {
        "category":   "Penetration",
        "subcategory": ["Floor", "Wall"]
    }
},{
    "_id":            "999e5f29c128685d860b3bad",
    "system_number":  "456",
    "target_country": "Canada",
    "system_type":     {
        "category":   "Penetration",
        "subcategory": ["Floor", "Wall"]
    }
}]

现在,如果我希望结果按'target_country'排序,那么“自动神奇地”做什么的“最佳做法”是什么?

是否有某些Mongoose / Express希望为我做的参数/语法?或者,这是一个我必须专门为它编码的情况? (那会破坏那里已经存在的'自我魔法'功能。)

谢谢!

更新:这对我有用。

exports.findAll = function(req, res) {

    // Sort Ascending: 
    http://dev.dom.com/systems?system_type.category=Penetration&sort=system_number

    // Sort Descending:
    http://dev.dom.com/systems?system_type.category=Penetration&sort=-system_number

    // Default sort ascending on system_number:
    http://dev.dom.com/systems?system_type.category=Penetration

    var sort_param = req.query.sort ? req.query.sort : 'system_number';

    System.find().sort(sort_param).find(function(err, menus) {        
        res.send(menus);
    });

};

我想我错了,是想我应该找到过滤器,然后排序,而不是找到所有,排序,然后再次使用过滤器。我猜想还在整个“回调哲学”中徘徊。

1 个答案:

答案 0 :(得分:1)

您需要为查询定义单独的网址参数,并对System查询的组件进行排序。如:

System.find(req.query.query).sort(req.query.sort).exec(function(err, systems) {
    res.send(systems);
});

然后,您将使用如下所示的请求网址参数:

?sort=target_country
    &query[system_type.category]=Penetration
    &query[system_type.subcategory]=Floor

sort here上的文档。