Node.js 如何排序';自动神奇地';使用猫鼬?
假设我有这样一个URL: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
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参数。请参阅更新的答案。我已更新我的问题以包含答案。我现在意识到我没有正确地形成最初的问题。对不起,如果我把你弄糊涂了。谢谢你帮我找到了正确答案。