MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách sắp xếp một tập hợp bằng cách sử dụng phần tử cuối cùng của một mảng

Nếu có thể, tôi khuyên bạn chỉ nên luôn (nhân đôi) lưu trữ giá trị mà bạn muốn sắp xếp. Đặt nó vào mảng và trong trường thứ hai. Bất cứ khi nào bạn đẩy một giá trị mới vào mảng (hoặc lưu trữ mảng), hãy thêm một trường mới tương ứng với "giá trị cuối cùng trong mảng", sau đó lập chỉ mục và sắp xếp trên đó. Trong ví dụ dưới đây, tôi gọi nó là lastR :

{ "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR": 3 }
{ "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR": 1 }
{ "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR": 10 }
{ "value" : -3, "r" : [ ] }

Tạo chỉ mục:

db.so.ensureIndex({lastR: 1})

Và sau đó sử dụng:

> db.so.find().sort({lastR: 1})
{ "_id" : ObjectId("5203a1c83c5438af60de63a1"), "value" : -3, "r" : [ ] }
{ "_id" : ObjectId("5203a1ad3c5438af60de639f"), "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR" : 1 }
{ "_id" : ObjectId("5203a1d33c5438af60de63a2"), "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR" : 3 }
{ "_id" : ObjectId("5203a1b73c5438af60de63a0"), "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR" : 10 }

Nó sẽ linh hoạt và có thể mở rộng hơn nhiều so với việc cố gắng sử dụng giải pháp tổng hợp (giải pháp này sẽ có giới hạn 16MB đối với tập kết quả và khiến việc truy xuất các tài liệu phức tạp khi cần xử lý phép chiếu trở nên phức tạp hơn nhiều).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb - kết nối thông qua ODBC

  2. Làm cách nào để tính tổng các mảng từ các tài liệu khác nhau trong MongoDB Aggregation?

  3. khung tổng hợp mongodb - Tìm nạp trường của tài liệu đầu tiên của mảng lồng nhau

  4. Hiệu suất truy vấn MongoDB cho hơn 5 triệu bản ghi

  5. Mongoexport sang nhiều tệp csv