Node.js 如何排序';自动神奇地';使用猫鼬?

Node.js 如何排序';自动神奇地';使用猫鼬?,node.js,mongodb,sorting,mongoose,Node.js,Mongodb,Sorting,Mongoose,假设我有这样一个URL: 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和Mongoo

假设我有这样一个URL:

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返回下面的集合“自动神奇”:

[{
    "_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"]
    }
}]
现在,如果我想按“目标国家”对结果进行排序,“自动神奇地”这样做的“最佳实践”是什么

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);
    });

};

我想我错的地方是,我认为我应该用过滤器查找然后排序,而不是用过滤器查找全部、排序然后再次查找。我想,我仍然在为整个“回调原理”绞尽脑汁。

您需要为查询定义单独的URL参数,并对
系统的组件进行排序。例如:

System.find(req.query.query).sort(req.query.sort).exec(function(err, systems) {
    res.send(systems);
});
然后使用如下所示的请求URL参数:

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

排序上的文档

可能重复而不是重复。在另一个线程中,sort参数被称为“date”。在这里,我不知道GET请求查询参数中提供的排序参数是什么。我建议它是“目标国家”,但它可以是任何有效字段。(为了清晰起见,我在示例中只显示了一些-还有更多。)好吧,如果我将http请求编辑为:那么我需要使用.sort(req.query.sort),但这失败了,可能是因为“更大”的问题。当sort参数在查询中时,似乎即使使用我定义的控制器方法(没有sort)也会失败。我有一套空的。很明显,我不理解这个系统。还没有找到(重新查询)。想法?@Eric好吧,我明白你现在想做什么了。如果使用整个
req.query
作为Mongoose查询对象,则无法单独指定排序参数。您需要为查询和排序定义单独的URL参数。请参阅更新的答案。我已更新我的问题以包含答案。我现在意识到我没有正确地形成最初的问题。对不起,如果我把你弄糊涂了。谢谢你帮我找到了正确答案。