unable to use $match operator for mongodb/mongoose aggregation with ObjectId unable to use $match operator for mongodb/mongoose aggregation with ObjectId mongoose mongoose

unable to use $match operator for mongodb/mongoose aggregation with ObjectId


Turns out the casting of the ObjectId seemed to be the issue. It was being cast using the Schema type Object Id mongoose.Schema.Types.ObjectId when it needed to be just a pure ObjectId mongoose.Types.ObjectId.


When using the find method or findById the query can be only:

var query = {    $or: [        {'_sender':req.body._id},        {'_recipient':req.body._id}    ]};

When using aggregate the query need a cast

var mongoose = require('mongoose');var query = {    $or: [        {'_sender':new mongoose.Types.ObjectId(decoded._id)},        {'_recipient':new mongoose.Types.ObjectId(decoded._id)}    ]};


var aggregate  = [{                $match: {                    'lenderId': new mongoose.Types.ObjectId(req.user),                    '_disbursed': true                }            },            {                $unwind:'$emi'            },            {                $match: {                    'emi._settled': false,                }            }];