我有一些客户的详细信息。架构如下:
const CustSchema=new Schema({
cust_name:{
type:String,
required:true
},
email:{
type:String,
required:true
},
age:{
type:Number,
required:true
},
city:{
type:String,
required:true
}
},{
timestamps: true,
versionKey: false
})
const CustModel = new mongoose.model("cust_details", CustSchema);
我尝试根据年龄限制获取客户。代码如下:
const filterByAge = async (req, res) => {
try{
console.log("Age range:", req.params.age_range);
let customers = await CustModel.aggregate([
{
$filter: {
input: "$cust_details",
cond: {
$lte: ["$$cust_details.age", req.params.age_range],
},
},
},
]);
console.log(customers);
}catch(err){
console.log("error in filter by age",err);
}
};
但是它抛出了错误:按年龄过滤时出错 MongoServerError:$filter 不允许或语法不正确
请帮忙解决。
$filter
在数组中使用,但不在集合中使用。不确定我是否正确理解了您的查询,但我认为您只需要$match。
尝试这样的操作:
此处的示例
顺便说一句,如果聚合不是强制性的,我认为最好的解决方案就是像
find
这样使用:此处的示例