I\'m trying to create some tests for my Mongoose models, and I can\'t figure out how to get the Jest/Mockgoose test to pass for a shorthand query/aggregation pipeline (see b
I have faced similar kind of problem and after researching a lot I found that that it was due to older version of mongoose as earlier versions are not compatible with breaking changes in MongoDB 3.6 and above.
I upgraded mongoose version one by one and I found that it works perfectly fine with mongoose version 4.12.2
or above (mongoose@4.12.2).
You can upgrade your mongoose version by running following command:
npm install mongoose@4.12.2
Finally figured this out: I had to add a cursor call to the aggregation pipeline, and translate it into a stream. To maintain the Promise I had the query method return a Promise that resolves with data once the stream has ended, as below:
activitySchema.query.getUnused = function() {
return new Promise((res, rej) => {
let data = []
return Activity.aggregate()
.lookup({
from: 'userActivity',
localField: '_id',
foreignField: 'activity',
as: 'matched_docs',
})
.match({ matched_docs: { $eq: [] } })
.sample(1)
.project({ matched_docs: 0, __v: 0 })
.cursor({})
.exec()
.on('data', doc => data.push(doc))
.on('end', () => res(data))
})
}