我正在 Mongoose 中使用聚合函数来获取一些数据,这里是它的静态实现
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);
最佳答案
试试这个方法:
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)
});
});
关于javascript - 如何使用express和mongoose中的参数使聚合函数动态化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52834817/