Search code examples
node.jsmongodbmongooseschematingodb

Find object id in object ids array returns empty array using Mongoose


I have two Mongoose schemas:

var EmployeeSchema = new Schema({
    name: String,
    servicesProvided: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Service'
    }]
});

var ServiceSchema = new Schema({
    name: String
});

I'm trying to find employees who provide a specified service with the service ID I send into the http request. This is my code:

Employee
  .find({
    servicesProvided: req.params.service_id
  })
  .exec(function(err, employees) {
    if (err) {
      console.log(err);
      res.send(err);
    } else {
      res.json(employees);
    }
});

The problem is that this code returns an empty array and I don't know why. I've tried a lot of things like casting the service id to mongoose.Schema.Types.ObjectId but it doesn't work.

Any idea? I'm using Mongoose 3.8.39. Thanks!


Solution

  • In your EmployeeSchema, servicesProvided is an array, to filter employees by that field you should use $in operator:

    var services = [req.params.service_id];
    Employee.find({
      servicesProvided: {
        $in: services
      }
    }, ...