-
Type:
Bug
-
Resolution: Cannot Reproduce
-
Priority:
Major - P3
-
None
-
Affects Version/s: 3.2.6
-
Component/s: Querying
-
None
-
ALL
I'm currently running a bulk operation to rename a property of a subdocument stored in an array. Since it's not possible to do a `$rename` for my use case, I'm doing a bulk operation, however the BulkWriteResult returned seems to be misleading and incorrect - in contrast, the actual update is done properly, however I can't be sure that it was done correctly by just looking at the BulkWriteResult alone.
This is a sample document:
{ _id: '3', state: 'active', stages: [ { id: '1', scheduledAt: '2016-08-30T20:23:04.355Z', state: 'processing', updatedAt: Wed Sep 28 2016 09:34:25 GMT-0700 (MST) } ], updatedAt: Wed Sep 28 2016 09:34:25 GMT-0700 (MST) }
And this is my bulk query that attempts to rename the `scheduledAt` property for the subdocument:
bulk.find({ _id: recipientId, state: 'active', stages: { $elemMatch: { id: stageId, state: 'processing' } } }).updateOne({ $set: { updatedAt: new Date(), 'stages.$.processedAt': new Date(), 'stages.$.state': 'processed', 'stages.$.updatedAt': new Date(), 'stages.$.wasScheduledAt': 'stages.$.scheduledAt' } }); bulk.find({ _id: recipientId, state: 'active', stages: { $elemMatch: { id: stageId } } }).updateOne({ $unset: { 'stages.$.scheduledAt': '' } });
And this is my BulkWriteResult:
{ writeErrors: [], writeConcernErrors: [], nInserted: 0, nUpserted: 2, nMatched: 0, nModified: 0, nRemoved: 0, upserted: [], ok: 1 }
Which is very misleading, because according to the documentation, nUpserted is set when explicitly using `upsert` which I'm not using, also `nMatched` value is 0, so from this result alone, it seems to me like 2 new documents were upserted as result of the bulk operation.
By Inspecting the document that I wanted to update, I can tell that the update was done correctly, also I'm sure it's not upserting documents because the collection count before and after the bulk op doesn't change.