Details
-
Bug
-
Resolution: Done
-
Major - P3
-
None
-
5.0.18
-
None
-
Server Triage
-
ALL
-
Description
-
-
- Prerequisites
-
- [X] I have written a descriptive issue title
-
-
- Mongoose version
-
5.12
-
-
- Node.js version
-
18
-
-
- MongoDB version
-
6
-
-
- Operating system
-
macOS
-
-
- Operating system version (i.e. 20.04, 11.3, 10)
-
13
-
-
- Issue
-
Hey there!
I'm using mongodb transaction over the operation. I insert many documents using `insertMany` in `CollectionA` then i $set and $push CollectionA ids in `CollectionB` a particular fields. then finally i delete few specific documents from `CollectionA`
Lets share an example :
try { |
const session = await mongoose.startSession();
|
session.startTransaction();
|
|
|
|
|
const createPages = await CollectionA.insertMany(newPages, \{ session });
|
|
|
const pageIds = cratePages.map((page) => page.id);
|
|
|
|
|
await CollectionB.findByIdAndUpdate(
|
Id,
|
\{ $set: { firstName: "John Doe" }, $push: \{ pages: { $each: pageIds } } }, |
\{ session }
|
|
|
|
|
if (isDelete) { |
await CollectionA.deleteMany(\{ _id: { $in:[1, 2, 3, 4, 5] } }, \{ session }); |
}
|
|
|
|
|
|
|
|
if (!cratePages || !updateSite) { |
await session.abortTransaction();
|
await session.endSession();
|
return null; |
}
|
|
|
|
|
await session.commitTransaction();
|
await session.endSession();
|
|
|
return cratePages; |
|
|
} catch(err){ |
await session.abortTransaction();
|
await session.endSession();
|
throw err; |
|
|
}
|
|
This is a graphql api. after running this api it's seems work perfectly but when i test this resolvers code using `mocha` and `chai.js` but when i run the test some times I passed the test (means work) and some times test throw bellow error
`
MongoError: Unable to read from a snapshot due to pending collection catalog changes; please retry the operation.Snapshot timestamp is Timestamp(1684396773, 34).Collection minimum is Timestamp(1684396773, 36)
at MessageStream.messageHandler(/usr/src / app / node_modules / mongodb / lib / cmap / connection.js: 299: 20)
at MessageStream.emit(node: events: 513: 28)
at MessageStream.emit(node: domain: 489: 12)
at processIncomingData(/usr/src / app / node_modules / mongodb / lib / cmap / message_stream.js: 144: 12)
at MessageStream._write(/usr/src / app / node_modules / mongodb / lib / cmap / message_stream.js: 42: 5)
at writeOrBuffer(node: internal / streams / writable: 392: 12)
at _write(node: internal / streams / writable: 333: 10)
at Writable.write(node: internal / streams / writable: 337: 10)
at Socket.ondata(node: internal / streams / readable: 766: 22)
at Socket.emit(node: events: 513: 28)
at Socket.emit(node: domain: 489: 12)
at addChunk(node: internal / streams / readable: 324: 12)
at readableAddChunk(node: internal / streams / readable: 297: 9)
at Readable.push(node: internal / streams / readable: 234: 10)
at TCP.onStreamRead(node: internal / stream_base_commons: 190: 23)
,
ok: 0,
code: 246,
codeName: 'SnapshotUnavailable',
'$clusterTime':
,
signature: { hash: [Binary], keyId: 0 }
},
[Symbol(errorLabels)]: Set(1) { 'TransientTransactionError' }
}
`