Bhushan Pawar Bhushan Pawar - 17 days ago 5
Node.js Question

Mongoose $in not working in nodeJS

I've created a collection containing some operation details like below

{ "_id" : ObjectId("580776455ecd3b4352705ec4"), "operation_number" : 10, "operation_description" : "SHEARING", "machine" : "GAS CUTT" }
{ "_id" : ObjectId("580776455ecd3b4352705ec5"), "operation_number" : 50, "operation_description" : "EYE ROLLING -1", "machine" : "E-ROLL-1" }
{ "_id" : ObjectId("580776455ecd3b4352705ec6"), "operation_number" : 60, "operation_description" : "EYE ROLLING -2", "machine" : "E-ROLL-1" }
{ "_id" : ObjectId("580776455ecd3b4352705ec7"), "operation_number" : 70, "operation_description" : "EYE REAMING", "machine" : "E-REAM" }
{ "_id" : ObjectId("580776455ecd3b4352705ec8"), "operation_number" : 80, "operation_description" : "COLD CENTER HOLE PUNCHING", "machine" : "C-PNCH-1" }
{ "_id" : ObjectId("580776455ecd3b4352705ec9"), "operation_number" : 150, "operation_description" : "READY FOR HT", "machine" : "RHT" }


using mongoose model as below

var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
var Promise = require("bluebird");

mongoose.Promise = Promise;
var Schema = mongoose.Schema;
var operationSchema = new Schema({
operation_number: {
type: String,
required: [
true,
"Please select valid operation code"
]unique : true
},
operation_description: {
type: String,
required: [
true,
"Please select valid operation description"
]
}
}, { strict: false });
var operation = mongoose.model('operation', operationSchema);
operationSchema.plugin(uniqueValidator, { message: 'Error, {PATH} {VALUE} already exist.' });


// make this available to our users in our Node applications
module.exports = operation;


now if I query this collection
operations
using
db.operations.find({operation_number : {$in : [10, 50, 60]}})
it works but when it comes to mongoose it's not working.

var mc = require("./data-models/operation")
var filter = {'operation_number':
{$in :
[10, 50, 60]
}
}
console.log(filter)
mc.find(filter, function(me, md){
console.log(me, md) // prints null []
})


Even I've tried removing single quotes around
operation_number


Please help finding way !

Answer

Your schema says that operation_number is a string:

operation_number: {
    type: String, <-- here
    ...
}

Therefore, Mongoose will cast the numbers in the $in array to strings.

However, the data in the database is numerical, which is a different type. You should change your schema so that operation_number becomes a Number:

operation_number: {
    type: Number,
    ...
}
Comments