В случае документов, если размер поля изменяется, выписывается новый документ с полями, отсортированными по имени поля.Это поведение можно увидеть с помощью следующих операторов
Случай 1: нет изменений в размере поля, поэтому нет изменений в порядке полей
> db.testcol.find()
> db.testcol.save({a:1,c:3,b:2})
> db.testcol.find()
{ "_id" : ObjectId("4d5efc3bec5855af36834f5a"), "a" : 1, "c" : 3, "b" : 2 }
> db.testcol.update({a:1},{$set:{c:22}})
> db.testcol.find()
{ "_id" : ObjectId("4d5efc3bec5855af36834f5a"), "a" : 1, "c" : 22, "b" : 2 }
Случай 2: изменяется размер поля, и поляreodered
> db.testcol.find()
> db.testcol.save({a:1,c:"foo",b:2,d:4})
> db.testcol.find()
{ "_id" : ObjectId("4d5efdceec5855af36834f5e"), "a" : 1, "c" : "foo", "b" : 2, "d" : 4 }
> db.testcol.update({a:1},{$set:{c:"foobar"}})
> db.testcol.find()
{ "_id" : ObjectId("4d5efdceec5855af36834f5e"), "a" : 1, "b" : 2, "c" : "foobar", "d" : 4 }
Есть ли конкретная причина, по которой вы не хотите, чтобы поля были переупорядочены?Выше использовалось 1.8.0_rc0 на OS X