У меня уже много часов на это, и я не могу найти решение.
Я использую Node / Express и пытаюсь запустить Mongoose (^5.2.0)
findOne с транзакциями. Для базы данных я запускаю ее в памяти с run-rs .
Коллекция ранее заполняется действительным документом, который я могу найти, используя mongo shell :
rs:PRIMARY> db.lots.findOne("aaaabbbbccccdddd11112222")
{
"_id" : ObjectId("aaaabbbbccccdddd11112222"),
"availableQty" : 0,
"expirationDate" : ISODate("2019-01-10T15:10:29.455Z"),
"__v" : 0
}
Но всякий раз, когда я запускаю этот код ниже, я получаю сообщение об ошибке:
const save = async (lotId) => {
const session = await mongoose.startSession()
await session.startTransaction()
try {
let lot = await Lots.findOne(lotId, session)
console.log('result: ' + lot)
await session.commitTransaction()
await session.endSession()
return lot
} catch(err) {
console.error('caught error: ' + err)
await session.abortTransaction()
await session.endSession()
throw err
}
}
Ошибка:
Uncaught TypeError: Cannot read property '$elemMatch' of undefined
at model.Query._castFields (node_modules/mongoose/lib/query.js:3873:22)
at model.Query.Query._findOne (node_modules/mongoose/lib/query.js:1861:23)
at process.nextTick (node_modules/kareem/index.js:333:33)
at _combinedTickCallback (internal/process/next_tick.js:95:7)
at process._tickCallback (internal/process/next_tick.js:161:9)
И кажется, что он даже не пойман в catch (), так как мой console.log никогда не печатается.