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

Thứ tự kết quả trong MongoDB với $ in?

Nói chung:nếu bạn đang tìm kiếm mà không có thứ tự sắp xếp được chỉ định thì không có thứ tự kết quả nào được đảm bảo.

Ngoài ra, không thể sắp xếp theo một mảng (thậm chí ít hơn nếu bạn muốn sắp xếp một mảng theo một mảng như được mô tả). Một sort () sử dụng so sánh logic để xác định thứ tự tăng dần hoặc giảm dần dựa trên một trường trong tài liệu kết quả của bạn.

Bạn sẽ phải triển khai mọi logic sắp xếp tùy chỉnh mong muốn trong mã ứng dụng của riêng mình.

Một phương pháp hữu ích có thể là tận dụng Khung tổng hợp mới trong MongoDB 2.2 .. cụ thể là khả năng $ thư giãn một mảng thành một luồng tài liệu.

Ví dụ:thiết lập dữ liệu thử nghiệm dưới dạng:

{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac946b50571321b2f932b"), "a" : [ 5, 4, 9 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }

$in tìm kiếm trên [2,3] sẽ dẫn đến các tài liệu phù hợp:

> db.matches.find({'a': { $in: [2,3]}})
{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }

Với khung tổng hợp, bạn có thể $match các tài liệu tương tự và sau đó thao tác các kết quả để đạt được một số cách sắp xếp cơ bản:$unwind các mảng, $sort chúng, rồi đến $group những điều này trở lại thành một kết quả:

db.matches.aggregate(
  { $match : {
       a: { $in: [2,3] }
  }},
  { $unwind : "$a" },
  { $sort: {
      "a": -1
  }},
  { $group : {
      _id: '$_id',
      a: { $addToSet: "$a" }
  }}
)

Vì vậy, trong ví dụ này, các tài liệu có mảng phù hợp hiện được sắp xếp theo thứ tự tăng dần cho các giá trị mảng:

{
    "result" : [
        {
            "_id" : ObjectId("504ac94eb50571321b2f932c"),
            "a" : [ 1, 2, 3]
        },
        {
            "_id" : ObjectId("504ac93fb50571321b2f932a"),
            "a" : [ 1, 2, 4 ]
        },
        {
            "_id" : ObjectId("504ac954b50571321b2f932d"),
            "a" : [ 3, 7, 9 ]
        }
    ],
    "ok" : 1
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose:không thể truy cập giá trị đã nhập

  2. Chèn dữ liệu vào mảng lồng nhau trong mongodb

  3. MongoDb c # trình điều khiển tìm mục trong mảng theo giá trị trường

  4. Networkx không bao giờ hoàn thành việc tính toán vị trí trung tâm giữa 2 triệu nút

  5. Không thể kết nối với MongoDB khi đã bật xác thực