я не знаю, у меня большая проблема с фильтрацией поиска с использованием mon goose не знаю, как это сделать, я пробовал много решений, и это то, что я придумал, но я не работаю вообще-то это моя модель:
`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'
}]
});
и это мой маршрутизатор: а здесь, где у меня есть большая проблема, не знаю, как я могу это сделать, я построил фильтр на основе запроса запроса, но это кажется, что это не работает на всех, даже когда я использовал $ и, $ или операторов, но не работал.
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);
}
});