过滤猫鼬搜索并通过多个条件表示

时间:2020-02-15 01:12:47

标签: node.js search mongoose filtering

我不知道我在使用猫鼬过滤搜索时遇到了一个大问题,我不知道该怎么做,我尝试了很多解决方案,这是我想出的,但是我根本不起作用 这是我的模特:

`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);
}

});

0 个答案:

没有答案