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

Làm thế nào để thực hiện một Order By dựa trên giá trị trong MongoDB?

Bạn cần $project "trọng số" cho mỗi giá trị theo thứ tự trong MongoDB và điều đó có nghĩa là .aggregate() phương pháp:

db.users.aggregate([
    { "$project": {
        "status": 1,
        "a_field": 1,
        "another_field": 1,
        "pretty_much_every_field": 1,
        "weight": {
            "$cond": [
                { "$eq": [ "$status", "A" ] },
                10,
                { "$cond": [ 
                    { "$eq": [ "$status", "B" ] },
                    8,
                    { "$cond": [
                        { "$eq": [ "$status", "C" ] },
                        6,
                        { "$cond": [
                            { "$eq": [ "$status", "D" ] },
                            4,
                            0
                        ]}
                    ]}
                ]}
            ] 
        }
    }},
    { "$sort": { "weight": -1 } }
])

Việc sử dụng lồng nhau của $cond bậc ba cho phép mỗi mục cho "trạng thái" được coi là một giá trị "trọng số" được sắp xếp theo thứ tự của các đối số đã cho.

Đến lượt nó, điều này được cung cấp cho $sort , trong đó giá trị dự kiến ​​("trọng số") được sử dụng để sắp xếp kết quả theo điểm của đối sánh có trọng số.

Vì vậy, theo cách này, ưu tiên được trao cho thứ tự của các kết quả phù hợp "trạng thái" xuất hiện đầu tiên trong các kết quả được sắp xếp.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Thống kê trực quan cho Máy chủ MongoDB của bạn

  2. Bắt đầu với Python và MongoDB

  3. Làm thế nào để bạn truy vấn cho không phải là null trong Mongo?

  4. Mongoose findOneAndUpdate và upert trả về không có lỗi, không có tài liệu nào bị ảnh hưởng

  5. MongoDB Không bắt đầu được - *** hủy bỏ sau khi thất bại fassert ()