说我有这样的网址:
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);
});
};
我想我错了,是想我应该找到过滤器,然后排序,而不是找到所有,排序,然后再次使用过滤器。我猜想还在整个“回调哲学”中徘徊。
答案 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上的文档。