我不知道我在使用猫鼬过滤搜索时遇到了一个大问题,我不知道该怎么做,我尝试了很多解决方案,这是我想出的,但是我根本不起作用 这是我的模特:
`var saleSchema = new mongoose.Schema({
name:{
type:String,
minlength:5,
maxlength:50,
required:true
},
description:{
type:String,
minlength:5,
maxlength:255,
},
rating:{
type:Number,
minlength:1,
maxlength:255,
default:0,
required:true
},
votes:{
type:Number,
minlength:1,
maxlength:255,
default:0,
required:true
},
price:{
type:Number,
minlength:5,
maxlength:50,
required:true
},
login:{
type:mongoose.Schema.Types.ObjectId,
ref:'Login'
},
contacte:{
type:mongoose.Schema.Types.ObjectId,
ref:'Contacte'
},
services:[{
type:mongoose.Schema.Types.ObjectId,
ref:'SaleService'
}],
pictures:[{
type:mongoose.Schema.Types.ObjectId,
ref:'Picture'
}],
bookings:[{
type:mongoose.Schema.Types.ObjectId,
ref:'Booking'
}]
});
这是我的路由器: 在这里我遇到大问题的地方不知道我该怎么做,我根据请求查询建立了一个过滤器,但是即使我使用$ and,$ or运算符但没有用,它似乎也无法正常工作工作。
router.get('/get/searchSale', async (req, res)=>{
try{
let filter = {};
let skip = parseInt(req.query.offset) || 1;
let nPerPage = parseInt(req.query.limit) || 5;
let sortby = req.query.sort;
let orderby = req.query.order;
if(req.query.wilaya && req.query.daira && req.query.commune)
{
filter.contacte = {
"contacte.wilaya" : req.query.wilaya,
"contacte.daira" : req.query.daira,
"contacte.commune" : req.query.commune
}
}
if(req.query.pricemax && req.query.pricemin)
{
filter.price = {
$lte: req.query.pricemax,
$gte: req.query.pricemin
};
}
if(req.query.date){
let date = moment(req.query.date);
filter.bookings = {
'bookings.date':{$ne: new Date(date)}
};
}
if(req.query.name){
filter.name = {$regex:query.name,$options:"i"};
}
console.log('filter '+filter.contacte);
let salemodel = await Sale.find(filter)
// let salemodel = await Sale.aggregate()
.populate({path:'login',select:'email picture',populate:{path:'picture'}})
.sort([[sortby, orderby]])
.skip(skip > 0 ? (skip+1) : 0).limit(nPerPage)
.exec();
if(!salemodel) return res.status(404).send('invalid sale');
console.log(salemodel);
res.send(salemodel);
}
catch(error){
console.log(error);
}
});