Mongodb có giữ nguyên thứ tự mảng không?

Xin chào,

Tôi đang phát triển ứng dụng Rails 3 bằng Mongoid. Vì tôi không nhận được
nhiều phản hồi về sự cố của mình trong danh sách gửi thư liên quan và
Stackoverflow, tôi nghĩ mình nên hỏi tại đây. Chỉ để đảm bảo rằng tôi
không hỏi điều gì vô nghĩa trong Mongodb. ;-)

Tôi có một tài liệu chứa một mảng các phần tử con.
cách tốt nhất để thay đổi thứ tự của các phần tử đó là gì?

chúc mừng,
Achim

Tôi gặp sự cố nhưng tôi không thể dán toàn bộ mã vào đây nên hãy để tôi giải thích. Tôi cần tìm một số tài liệu theo id và điền phần tử mảng ObjectId của nó. Giả sử tôi có tài liệu sau từ bộ sưu tập Người dùng

{
  _id: 1,
  "first_name":"Nick",
  "last_name":"Parsons",
  "email":"[email protected]",
  "password":"foo",
  "clients":[
    "50f5e901545cf990c500000f",
    "50f5e90b545cf990c5000010",
    "50f5e90b545cf990c5000013"
  ]
}

Sau khi tìm thấy nó, tôi điền vào các khách hàng của nó như thế này

User.findById(1)
  .populate('clients')
  .exec(function (err, user) {

  });

Sau khi đoạn mã trên được thực thi, tôi có biến 'người dùng' với mảng khách hàng được điền. Nhưng các khách hàng đã đặt sai thứ tự, đại loại như thế này

       {
          _id: "50f5e901545cf990c500000f",
          "first_name":"cl1",
       },
       {
          _id: "50f5e90b545cf990c5000013",
          "first_name":"cl3",
       },
       {
          _id: "50f5e90b545cf990c5000010",
          "first_name":"cl2",
       }

Nên là

    "50f5e901545cf990c500000f",
    "50f5e90b545cf990c5000010",
    "50f5e90b545cf990c5000013" 

Thay vì

    "50f5e901545cf990c500000f",
    "50f5e90b545cf990c5000013",
    "50f5e90b545cf990c5000010"     

Có ai có vấn đề tương tự hoặc tôi may mắn?

CHỈNH SỬA. Tôi đã thêm mã. http. // bánh ngọt. org/5901177 Trong mã đó tôi tạo 3 máy khách và đẩy vào người dùng. mảng khách hàng. Sau đó, tôi đã thêm một khách hàng nữa trên đầu người dùng. mảng khách hàng. Vì vậy, khi tôi làm

Tôi đang cân nhắc sử dụng MongoDB để lưu trữ tài liệu bao gồm danh sách các cặp khóa/giá trị. Cách lưu trữ an toàn nhưng xấu xí và cồng kềnh này là

[ ['k1' : 'v1'] , ['k2' : 'v2'],  ...]

Nhưng các phần tử tài liệu vốn đã được sắp xếp trong cấu trúc dữ liệu BSON cơ bản, vì vậy về nguyên tắc

{k1 : 'v1', 
 k2 : 'v2',  ...}

nên là đủ. Tuy nhiên, tôi hy vọng hầu hết các ràng buộc ngôn ngữ sẽ diễn giải chúng dưới dạng các mảng kết hợp và do đó có khả năng xáo trộn thứ tự. Vì vậy, những gì tôi cần biết là

  • Bản thân MongoDB có hứa sẽ duy trì thứ tự vật phẩm ở dạng thứ hai không
  • Các ràng buộc ngôn ngữ có một số API có thể trích xuất biểu mẫu được đặt hàng không - ngay cả khi API "thuận tiện" thông thường trả về một mảng kết hợp

Tôi chủ yếu quan tâm đến Javascript và PHP ở đây, nhưng tôi cũng muốn biết về các ngôn ngữ khác. Mọi trợ giúp đều được đánh giá cao hoặc chỉ là một liên kết đến một số tài liệu mà tôi có thể truy cập RTM

Giải pháp tốt nhất

Từ phiên bản 2. 6 trên, Tuy nhiên, trường

User.findById(1)
  .populate('clients')
  .exec(function (err, user) {

  });
6 luôn xuất hiện trước, việc đổi tên các trường có thể dẫn đến việc sắp xếp lại thứ tự. Tuy nhiên, tôi thường cố gắng không dựa vào các 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ỗi lớp phải cung cấp một số loại đảm bảo cho sự ổn định của đơn hàng

Câu trả lời gốc

Không, MongoDB

"Không có gì đảm bảo rằng thứ tự trường sẽ nhất quán hoặc giống nhau sau khi cập nhật. "

Cụ thể, các bản cập nhật tại chỗ làm thay đổi kích thước tài liệu thường sẽ thay đổi thứ tự của các trường. Ví dụ: nếu bạn

User.findById(1)
  .populate('clients')
  .exec(function (err, user) {

  });
7 trường có giá trị cũ thuộc loại số và giá trị mới là
User.findById(1)
  .populate('clients')
  .exec(function (err, user) {

  });
8, các trường thường được sắp xếp lại

Tuy nhiên, mảng bảo toàn thứ tự chính xác

[ {'key1' : 'value1'}, {'key2' : 'value2'}, .. ]

Tôi không hiểu tại sao điều này là "xấu xí" và "phồng" cả. Lưu trữ 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 như danh sách chắc chắn là xấu. Các đối tượng có ngữ nghĩa mảng kết hợp (i. e. 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

________số 8

Hãy nhớ rằng MongoDB là cơ sở dữ liệu đối tượng, không phải kho lưu trữ khóa/giá trị

Giải pháp liên quan

Mongodb – Cách cập nhật _id của một Tài liệu MongoDB

Bạn không thể cập nhật nó. Bạn sẽ phải lưu tài liệu bằng cách sử dụng

User.findById(1)
  .populate('clients')
  .exec(function (err, user) {

  });
6 mới, sau đó xóa tài liệu cũ

// store the document in a variable
doc = db.clients.findOne({_id: ObjectId("4cc45467c55f4d2d2a000002")})

// set a new _id on the document
doc._id = ObjectId("4c8a331bda76c559ef000004")

// insert the document, using the new _id
db.clients.insert(doc)

// remove the document with the old _id
db.clients.remove({_id: ObjectId("4cc45467c55f4d2d2a000002")})

Mongodb – Làm cách nào để biết mongoDB đang lưu trữ dữ liệu ở đâu? . )

       {
          _id: "50f5e901545cf990c500000f",
          "first_name":"cl1",
       },
       {
          _id: "50f5e90b545cf990c5000013",
          "first_name":"cl3",
       },
       {
          _id: "50f5e90b545cf990c5000010",
          "first_name":"cl2",
       }
0 mặc định vị trí cơ sở dữ liệu là
{k1 : 'v1', 
 k2 : 'v2',  ...}
0

Nếu bạn chạy

{k1 : 'v1', 
 k2 : 'v2',  ...}
1 và bạn không thấy
{k1 : 'v1', 
 k2 : 'v2',  ...}
2 thông báo rõ ràng cho
       {
          _id: "50f5e901545cf990c500000f",
          "first_name":"cl1",
       },
       {
          _id: "50f5e90b545cf990c5000013",
          "first_name":"cl3",
       },
       {
          _id: "50f5e90b545cf990c5000010",
          "first_name":"cl2",
       }
0 để xem tham số đó cho vị trí db và bạn không có
{k1 : 'v1', 
 k2 : 'v2',  ...}
4 trong
{k1 : 'v1', 
 k2 : 'v2',  ...}
5 của mình, thì vị trí mặc định sẽ là.
{k1 : 'v1', 
 k2 : 'v2',  ...}
0 và bạn nên nhìn vào đó

MongoDB có duy trì thứ tự chèn không?

MongoDB. các tài liệu đã nhập không giữ nguyên thứ tự nếu được chèn thông qua insertMany() db .

Chúng tôi có thể lưu trữ mảng trong MongoDB không?

Một trong những lợi ích của mô hình lược đồ phong phú của MongoDB là khả năng lưu trữ các mảng dưới dạng giá trị trường tài liệu . Lưu trữ mảng dưới dạng giá trị trường cho phép bạn lập mô hình mối quan hệ một-nhiều hoặc nhiều-nhiều trong một tài liệu, thay vì trên các tập hợp riêng biệt như bạn có thể làm trong cơ sở dữ liệu quan hệ.

Làm cách nào để sắp xếp một mảng trong MongoDB?

Để sắp xếp mảng, hãy làm theo các bước sau. .
sử dụng thư giãn để lặp qua mảng
sắp xếp mảng
sử dụng nhóm để hợp nhất các đối tượng của mảng thành một mảng
sau đó chiếu các lĩnh vực khác

Thứ tự truy vấn có quan trọng với MongoDB không?

Bởi vì MongoDB có thể đọc các chỉ mục theo cả thứ tự tăng dần và giảm dần, nên hướng của chỉ mục một phím không thành vấn đề . Các chỉ mục hỗ trợ các truy vấn, hoạt động cập nhật và một số giai đoạn của quy trình tổng hợp.