-
Type:
Bug
-
Resolution: Done
-
Priority:
Major - P3
-
None
-
Affects Version/s: 1.8, 1.8.1, 1.8.2
-
Component/s: None
-
Environment:.net 4.0
-
None
-
Fully Compatible
-
None
-
None
-
None
-
None
-
None
-
None
This command:
var builder = Update.PushEachWrapped("ArrayData", new List<GenericListItem>
{
new GenericListItem()
});
It is translated in :
{ "$push" : { "ArrayData" : { "$each" : [[{ "Name" : "name", "Surname" : "surname" }]] } } }
that is wrong, due to a [ in sub elements.
The right command translation has to be
{ "$push" : { "ArrayData" : { "$each" : [{ "Name" : "name", "Surname" : "surname" }] } } }
otherwise a sub array will be created.
The same problem is also present in :
PushAllWrapped
AddToSetEachWrapped
PushEachWrapped
There is a possible workaround forcing the conversion between IEnumerable<T> to Array. So re-writing the above code in this way
var builder = Update.PushEachWrapped("ArrayData", new List<GenericListItem>
{
new GenericListItem()
{ Name = "name", Surname = "surname" }
}.ToArray());
create a correct serialization.
It seems that the problem is located here in UpdateBuilder.cs
BsonDocumentWrapper.CreateMultiple(values).Cast<BsonValue>();
(public UpdateBuilder PushEachWrapped<T> ... raw 1309 in UpdateBuilder.cs) wrap each values in an array