Từ Phiên bản 2.6 trở đi, MongoDB giữ nguyên thứ tự của các trường nếu có thể.
Tuy nhiên, _id
trường luôn xuất hiện trước một trường đổi tên có thể dẫn đến việc sắp xếp lại. Tuy nhiên, tôi thường cố gắng không dựa vào những chi tiết như thế này. Như câu hỏi ban đầu đã đề cập, cũng có các lớp bổ sung cần xem xét mà mỗi lớp phải cung cấp một số loại đảm bảo cho sự ổn định của đơn đặt hàng ...
Câu trả lời gốc:
Không, MongoDB không đảm bảo về thứ tự các trường :
Đặc biệt, các bản cập nhật tại chỗ thay đổi kích thước tài liệu thường sẽ thay đổi thứ tự các trường. Ví dụ:nếu bạn $set
một trường có giá trị cũ là kiểu số và giá trị mới là NumberLong
, các trường thường được sắp xếp lại.
Tuy nhiên, các mảng duy trì thứ tự chính xác:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Tôi không hiểu tại sao điều này lại "xấu xí" và "cồng kềnh" một chút nào. Lưu trữ một danh sách các đối tượng phức tạp không thể dễ dàng hơn. Tuy nhiên, lạm dụng các đối tượng làm danh sách chắc chắn là xấu:Các đối tượng có ngữ nghĩa mảng liên kết (tức là chỉ có thể có một trường của một tên nhất định), trong khi danh sách / mảng thì không:
// not ok:
db.foo2.insert({"foo" : "bar", "foo" : "lala" });
db.foo2.find();
{ "_id" : ObjectId("4ef09cd9b37bc3cdb0e7fb26"), "foo" : "lala" }
// a list can do that
db.foo2.insert({ 'array' : [ {'foo' : 'bar'}, { 'foo' : 'lala' } ]});
db.foo2.find();
{ "_id" : ObjectId("4ef09e01b37bc3cdb0e7fb27"), "array" :
[ { "foo" : "bar" }, { "foo" : "lala" } ] }
Hãy nhớ rằng MongoDB là cơ sở dữ liệu đối tượng, không phải là nơi lưu trữ khóa / giá trị.