Skip to content

Commit 77e5c02

Browse files
committed
Avoid reordering of _id field in Document and BasicDBObject
JAVA-3353
1 parent 06e7895 commit 77e5c02

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

bson/src/main/org/bson/Document.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ public String toJson(final Encoder<Document> encoder) {
436436
*/
437437
public String toJson(final JsonWriterSettings writerSettings, final Encoder<Document> encoder) {
438438
JsonWriter writer = new JsonWriter(new StringWriter(), writerSettings);
439-
encoder.encode(writer, this, EncoderContext.builder().isEncodingCollectibleDocument(true).build());
439+
encoder.encode(writer, this, EncoderContext.builder().build());
440440
return writer.getWriter().toString();
441441
}
442442

bson/src/test/unit/org/bson/DocumentTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,16 @@ public void toJsonShouldReturnEquivalent() {
7979
document);
8080
}
8181

82+
// Test to ensure that toJson does not reorder _id field
83+
@Test
84+
public void toJsonShouldNotReorderIdField() {
85+
// given
86+
Document d = new Document().append("x", 1)
87+
.append("y", Collections.singletonList("one"))
88+
.append("_id", "1");
89+
assertEquals(new DocumentCodec().decode(new JsonReader(d.toJson()), DecoderContext.builder().build()), d);
90+
}
91+
8292
// Test in Java to make sure none of the casts result in compiler warnings or class cast exceptions
8393
@Test
8494
public void shouldGetWithDefaultValue() {

driver-core/src/main/com/mongodb/BasicDBObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public String toJson(final Encoder<BasicDBObject> encoder) {
191191
*/
192192
public String toJson(final JsonWriterSettings writerSettings, final Encoder<BasicDBObject> encoder) {
193193
JsonWriter writer = new JsonWriter(new StringWriter(), writerSettings);
194-
encoder.encode(writer, this, EncoderContext.builder().isEncodingCollectibleDocument(true).build());
194+
encoder.encode(writer, this, EncoderContext.builder().build());
195195
return writer.getWriter().toString();
196196
}
197197

driver-core/src/test/unit/com/mongodb/BasicDBObjectTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,19 @@ public void testParse() {
6060

6161
@Test
6262
public void testToJson() {
63-
BasicDBObject document = BasicDBObject.parse("{ '_id' : { '$oid' : '000000000000000000000000' }, 'int' : 1, 'string' : 'abc', "
63+
BasicDBObject document = BasicDBObject.parse("{ 'int' : 1, 'string' : 'abc', '_id' : { '$oid' : '000000000000000000000000' }, "
6464
+ "'dbRef' : { $ref: 'collection', $id: { $oid: '01234567890123456789abcd' }, $db: 'db' } }");
6565

66-
assertEquals("{\"_id\": {\"$oid\": \"000000000000000000000000\"}, \"int\": 1, \"string\": \"abc\", "
66+
assertEquals("{\"int\": 1, \"string\": \"abc\", \"_id\": {\"$oid\": \"000000000000000000000000\"}, "
6767
+ "\"dbRef\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"01234567890123456789abcd\"}, \"$db\": \"db\"}}",
6868
document.toJson());
69-
assertEquals("{\"_id\": ObjectId(\"000000000000000000000000\"), \"int\": 1, \"string\": \"abc\", "
69+
assertEquals("{\"int\": 1, \"string\": \"abc\", \"_id\": ObjectId(\"000000000000000000000000\"), "
7070
+ "\"dbRef\": {\"$ref\": \"collection\", \"$id\": ObjectId(\"01234567890123456789abcd\"), \"$db\": \"db\"}}",
7171
document.toJson(JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build()));
72-
assertEquals("{\"_id\": {\"$oid\": \"000000000000000000000000\"}, \"int\": 1, \"string\": \"abc\", "
72+
assertEquals("{\"int\": 1, \"string\": \"abc\", \"_id\": {\"$oid\": \"000000000000000000000000\"}, "
7373
+ "\"dbRef\": {\"$ref\": \"collection\", \"$id\": {\"$oid\": \"01234567890123456789abcd\"}, \"$db\": \"db\"}}",
7474
document.toJson(DECODER));
75-
assertEquals("{\"_id\": ObjectId(\"000000000000000000000000\"), \"int\": 1, \"string\": \"abc\", "
75+
assertEquals("{\"int\": 1, \"string\": \"abc\", \"_id\": ObjectId(\"000000000000000000000000\"), "
7676
+ "\"dbRef\": {\"$ref\": \"collection\", \"$id\": ObjectId(\"01234567890123456789abcd\"), \"$db\": \"db\"}}",
7777
document.toJson(JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build(), DECODER));
7878
}

0 commit comments

Comments
 (0)