-
Type:
Bug
-
Resolution: Cannot Reproduce
-
Priority:
Major - P3
-
None
-
Affects Version/s: 3.2.6
-
Component/s: Querying
-
None
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
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.