I have this model:
var HuntGroupSchema = new Schema({
name : { type: String, required: true }
,domain : { type: ObjectId, required: true, ref: 'Domain' }
,members : [{ type: ObjectId, ref: 'User'}]
,email : { type: String, unique: true}
,pin : { type: Number, default: 0}
,extension : { type: Number, required: true}
,timescheme : { type: ObjectId, ref: 'TimeScheme'}
,ddi : { type: String}
});
and have this data
db.huntgroups.find()
{ "_id" : ObjectId("50373487947749f0370000b0"), "ddi" : "01376xxxxxx", "domain" : ObjectId("502807e9b9e737036d000018"), "email" : "julian@dotr.com", "extension" : 3001, "members" : [ ObjectId("50376767b5c99cd862000003") ], "name" : "test22", "pin" : 1234 }
and this test always returns -1
// req.params['member'] === '50376767b5c99cd862000003'
var member_id = mongoose.Types.ObjectId(req.params['member']);
console.log($.inArray(member_id, huntgroup.members));
can anyone tell me why ?
Warning: I am a newbie at mongoose, jquery and javascript, so go gentle ;)
It's because $.inArray
is only checking for reference equality on the ObjectId objects.
To compare the values of the ObectIds instead you'd need to use the equals
operator of ObjectId
by doing something like the following:
huntgroup.members.forEach(function(member) {
if (member.equals(member_id)) {
// Yes, member_id is contained in the array
}
});