Relatively Simple Scenario:
I have this Voucher
object which has a user
property (of type ObjectId
). I want to get the sum of
var aggregate = [
{
$match: {
'lenderId': new mongoose.Types.ObjectId(req.user),
'_disbursed': true
}
},
{
$unwind:'$emi'
},
{
$match: {
'emi._settled': false,
}
}
];
use toString() method.
{ $match : { user : user_id.toString() , expires : { $gt : new Date() } } }
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)}
]
};