diff --git a/CH.Bson.Test/Diff.cs b/CH.Bson.Test/Diff.cs index 0987a03..8100ea9 100644 --- a/CH.Bson.Test/Diff.cs +++ b/CH.Bson.Test/Diff.cs @@ -270,7 +270,7 @@ public void DiffAFieldAddedAndAFieldModified() var expectedDiff = new BsonDocument { - {"+a:newField", 3}, + {"+a:newField", newFieldValue}, { existingField, new BsonDocument { diff --git a/CH.Bson/Diff.cs b/CH.Bson/Diff.cs index b0d16ef..b5b571c 100644 --- a/CH.Bson/Diff.cs +++ b/CH.Bson/Diff.cs @@ -55,7 +55,6 @@ public static BsonDocument Diff(this BsonDocument a, BsonDocument b) { var bson = ProcessDifferencesInDocument(a, b); - bson.Add(ProcessFields(a, b)); return bson; @@ -73,16 +72,14 @@ private static BsonDocument ProcessDifferencesInDocument(this BsonDocument a, Bs { var bson = new BsonDocument(); - if (!a.HasSameElementNamesAs(b)) + foreach (var e in a.Where(e => !b.Contains(e.Name))) + { + bson.SetElement(new BsonElement("+a:" + e.Name, e.Value)); + } + + foreach (var e in b.Where(e => !a.Contains(e.Name))) { - foreach (var e in a.Where(e => !b.Contains(e.Name))) - { - bson.SetElement(new BsonElement("+a:" + e.Name, e.Value)); - } - foreach (var e in b.Where(e => !a.Contains(e.Name))) - { - bson.SetElement(new BsonElement("+b:" + e.Name, e.Value)); - } + bson.SetElement(new BsonElement("+b:" + e.Name, e.Value)); } return bson;