-
Type:
Bug
-
Resolution: Duplicate
-
Priority:
Major - P3
-
None
-
Affects Version/s: 3.4.1, 3.4.7, 3.5.12
-
Component/s: Querying
-
None
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Consider a simple collection with a single document, build this way :
("a" and "a2" fields are used to demonstrate the update behavior below)
db.mongo.insert(
{
"a":[NumberInt(123), NumberInt(456), NumberInt(789)],
"a2": NumberInt(456),
"b":{
"c":[
{"d":NumberInt(10), "e":NumberInt(20)},
{"d":NumberInt(10), "e":NumberInt(21)},
{"d":NumberInt(10), "e":NumberInt(22)},
{"d":NumberInt(10), "e":NumberInt(23)},
{"d":NumberInt(10), "e":NumberInt(24)},
{"d":NumberInt(11), "e":NumberInt(25)},
{"d":NumberInt(11), "e":NumberInt(26)},
{"d":NumberInt(11), "e":NumberInt(27)},
]
}
}
);
My goal is to update array b.c and add elements to a set where d = 10 and e = 24, only for document where a = 456.
This first query does not work : it updates the element in array b.c with the position of "456" in the a array ( = the second element), even with the $elemMatch on b.c.
db.mongo.update(
{
"a": NumberInt(456),
"b.c": {
"$elemMatch": {
"d": NumberInt(10),
"e": NumberInt(24)
}
}
},
{
"$addToSet":{
"b.c.$.f":{"x":NumberInt(1), "y":NumberInt(2)}
}
}
);
This second query does work : it updates the correct element in array because a2 is not an array. This issue being, I need a to be an array and hold several values.
db.mongo.update(
{
"a2": NumberInt(456),
"b.c": {
"$elemMatch": {
"d": NumberInt(10),
"e": NumberInt(24)
}
}
},
{
"$addToSet":{
"b.c.$.f":{"x":NumberInt(1), "y":NumberInt(2)}
}
}
);
I have tried to change the order of the conditions in the query part, but this does not change the behavior.
Any help (or even better, a fix..) would be greatly appreciated.
Tested on 3.4.1, 3.4.7 and 3.5.12 (to see if the changes in SERVER-831 would fix it.
- duplicates
-
SERVER-18500 Resolve ambiguity of positional projections with multiple implicit array traversal predicates in certain cases
-
- Backlog
-
- is related to
-
SERVER-27089 Extend the update subsystem to support more expressive updates to array fields
-
- Closed
-