我在猫鼬中使用聚合函数来获取一些数据,这里是其静态实现
app.get("/male",function (req,res) {
Record.aggregate([
{
$match:
{"gender": "male"}
},
{
$group:{
_id : "$type",
total : {$sum : 1}
}
},{
$sort: {_id: 1}
}
]).exec((err,data) => {
if (err) {console.log(err)}
res.json(data)
})
})
我想使其完全动态,所以我尝试了
app.get("/:query/:type/:match",function (req,res) {
var match = req.params.match
Record.aggregate([
{
$match:
{match : req.params.type}
},
{
$group:{
_id : "$"+req.params.query,
total : {$sum : 1}
}
},{
$sort: {_id: 1}
}
]).exec((err,data) => {
if (err) {console.log(err)}
res.json(data)
})
})
我进行了一点调试,看来 match 没有传递 $ match ,
如果我放置静态变量而不是匹配项,那么它会起作用
这里是它的示意图
var mongoose = require('mongoose');
var RecordSchema = new mongoose.Schema({
type:String,
gender:String,
age:Number,
timeSpent:Number,
arrivedAt:Number
})
module.exports = mongoose.model("Record", RecordSchema);
答案 0 :(得分:2)
尝试这种方式:
app.get("/:query/:type/:match",function(req,res) {
var match = req.params.match;
var type= req.params.type;
var query = "$"+req.params.query;
var matchCriteria = {};
matchCriteria[match]=type;
Record.aggregate([
{
$match:matchCriteria
},
{
$group:{
_id : query,
total:{$sum:1}
}
},{
$sort: {_id: 1}
}
]).exec((err,data) => {
if (err) {console.log(err)}
res.json(data)
});
});