Details
-
Improvement
-
Resolution: Done
-
Major - P3
-
3.3.11
-
Fully Compatible
-
Query 2017-03-27, Query 2017-04-17
Description
Requiring a query to determine the length of a document's array and calculate the appropriate positive integer index introduces a race condition. By allowing negative indexes (indicating distance from the end) on the $position modifier, this race condition could be avoided.
This would match Python semantics for list manipulation. An example, given the following document:
{
|
acl: [
|
{grant: True, user: "amcgregor"}, |
{grant: True, user: "bdole"}, |
{grant: False}
|
]
|
}
|
And the following update operation:
{
|
$push: {
|
acl: {
|
$each: [ { grant: True, user: "algore" } ], |
$position: -1
|
}
|
}
|
}
|
The resulting document should be:
{
|
acl: [
|
{grant: True, user: "amcgregor"}, |
{grant: True, user: "bdole"}, |
{grant: True, user: "algore"}, |
{grant: False}
|
]
|
}
|
The default insert location, the end (when $position is omitted or exceeds the length of the array), is unaffected.
Thank you for your consideration!
Attachments
Issue Links
- depends on
-
SERVER-27089 Extend the update subsystem to support more expressive updates to array fields
-
- Closed
-
- related to
-
SERVER-27089 Extend the update subsystem to support more expressive updates to array fields
-
- Closed
-
- links to