mijok
mijok

Reputation: 201

Mongoose query between values Express Js

am playing with MongoDb and Mongoose, and I am trying to filter by price range, for example display properties from 0 to any number (10000),

My model is very simple:

const mongoose = require('mongoose');

const PropertySchema = mongoose.Schema({
    title: String,
    description: String,
    price: Number,
    town: String
})


module.exports = mongoose.model('Property', PropertySchema);

And route. this what am up to, set price from 0 to any number, I don’t want to hard-code this max value

const express = require('express');   
const router = express.Router();
const Property = require('../models/Property'); 

router.get('/', async (req, res) => {
    try {
        const properties = await Property.find({ price: { $in: [ 0, 0 ] } });
        res.json(properties);
    } catch (err) {
        res.json({ message: err });
    }
});

URL

properties?price=0&10000

Can anybody help me with this? How can I set range of price for properties?

Upvotes: 0

Views: 1692

Answers (2)

Sarfraaz
Sarfraaz

Reputation: 1269

You need to pass both priceMin & priceMax from queryParams & use same in your query

const express = require('express');   
const router = express.Router();
const Property = require('../models/Property'); 

router.get('/', async (req, res) => {
    try {
        const properties = await Property.find({ price: { $gte:req.query.priceMin, $lte: req.query.priceMax } });
        res.json(properties);
    } catch (err) {
        res.json({ message: err });
    }
});

URL

properties?priceMin=0&priceMax=10000

Upvotes: 1

Prakash Karena
Prakash Karena

Reputation: 2605

You can do this using $gt and $lt

 properties?min=0&max=10000

 router.get('/', async (req, res) => {

  let min = req.query.min;
  let max = req.query.max;

    try {
        const properties = await Property.find({ price: { $gt : min , $lt : max } });
        res.json(properties);
    } catch (err) {
        res.json({ message: err });
    }
});

Upvotes: 1

Related Questions