-
Type:
Improvement
-
Resolution: Won't Fix
-
Priority:
Minor - P4
-
None
-
Affects Version/s: 2.6.0-rc2
-
Component/s: Write Ops
-
None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
$unset should get an error on negative array indices, like $pop and $pull do
Step 1.
Add a document with an array:
> db.test.drop()
> db.test.insert({_id : 1, a : [1, 2]})
Step 2.
Try to $unset at an invalid negative index:
> db.test.update({_id : 1}, {$unset : {"a.-2" : 1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Actual result:
The operation is silently ignored.
Expected result:
An error should be returned, like in $pop and $pull cases.
Step 3.
Compare with $pop and $pull invoked with negative indices, they return expected errors:
> db.test.update({_id : 1}, {$pop : {"a.-2" : 1}})
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16837,
"errmsg" : "cannot use the part (a of a.-2) to traverse the element ({a: [ 1.0, 2.0 ]})"
}
})
> db.test.update({_id : 1}, {$pull : {"a.-2" : 1}})
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16837,
"errmsg" : "cannot use the part (a of a.-2) to traverse the element ({a: [ 1.0, 2.0 ]})"
}
})
- related to
-
SERVER-13318 Update stats are incorrect after an error
-
- Closed
-