фильтрация поиска в пн goose и express по нескольким критериям - PullRequest
0 голосов
/ 15 февраля 2020

я не знаю, у меня большая проблема с фильтрацией поиска с использованием 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);
}

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...