Neighlyd
Neighlyd

Reputation: 352

Mongoose can't search by number field

I have a schema that has an id field that is set to a string. When I use collection.find({id: somenumber}) it returns nothing.

I've tried casting somenumber to a string and to a number. I've tried sending somenumber through as a regex. I've tried putting id in quotes and bare... I have no idea what's going on. Any help and input would be appreciated.

Toys.js

var Schema = mongoose.Schema;

var toySchema = new Schema( {
    id: {type: String, required: true, unique: true},
    name: {type: String, required: true},
    price: Number
    } );

My index.js is as such

app.use('/findToy', (req, res) => {
    let query = {};

    if (req.query.id)
        query.id = req.query.id;

    console.log(query);

    // I've tried using the query variable and explicitly stating the object as below. Neither works.
    Toy.find({id: '123'}, (err, toy) => {
        if (!err) {
            console.log("i'm right here, no errors and nothing in the query");
            res.json(toy);
        }
        else {
            console.log(err);
            res.json({})
        }
    })

I know that there is a Toy in my mongoDB instance with id: '123'. If I do Toy.find() it returns:

[{"_id":"5bb7d8e4a620efb05cb407d2","id":"123","name":"Dog chew toy","price":10.99},
{"_id":"5bb7d8f7a620efb05cb407d3","id":"456","name":"Dog pillow","price":25.99}]

I'm at a complete loss, really.

Upvotes: 1

Views: 1521

Answers (1)

Dženis H.
Dženis H.

Reputation: 7822

This is what you're looking for. Visit the link for references, but here's a little snippet.

For the sake of this example, let's have a static id, even though Mongo creates a dynamic one [ _id ]. Maybe that what is the problem here. If you already a record in your DB with that id, there's no need for adding it manually, especially not the already existing one. Anyways, Drop your DB collection, and try out this simple example:

    // Search by ObjectId
    const id = "123";

    ToyModel.findById(id, (err, user) => {
    if(err) {
    // Handle your error here
    } else {
     // If that 'toy' was found do whatever you want with it :)
    } 
});

Also, a very similar API is findOne.

 ToyModel.findOne({_id: id}, function (err, toy) { ... });

Upvotes: 1

Related Questions