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

cách sắp xếp mảng đối tượng theo danh sách tùy ý trong mongo

Bạn có thể thử chạy hàm so sánh tùy chỉnh với JavaScript gốc sort () phương thức trên mảng được trả về từ mã <> cursor.toArray () phương pháp:

var order = ["food", "coffee", "grocery"];
var docs = db.collection.find().toArray().sort(function(a, b) { 
    return order.indexOf(a.category) - order.indexOf(b.category);
});
printjson(docs);

Đầu ra mẫu

[
    {
        "_id" : "4JW7miNITl",
        "category" : "food"
    },
    {
        "_id" : "4Je4kmrrbZ",
        "category" : "coffee"
    },
    {
        "_id" : "4JgAh3N86x",
        "category" : "coffee"
    },
    {
        "_id" : "4JEEuhNIae",
        "category" : "grocery"
    }
]

Với phiên bản MongoDB 3.4 mới, bạn sẽ có thể tận dụng việc sử dụng các toán tử MongoDB gốc $addFields $ indexOfArray trong khuôn khổ tổng hợp.

  • $ addFields bước đường dẫn cho phép bạn $ dự án các trường mới vào tài liệu hiện có mà không cần biết tất cả các trường hiện có khác.
  • $ indexOfArray biểu thức trả về vị trí của một phần tử cụ thể trong một mảng nhất định.

Vì vậy, tổng thể lại, bạn có thể thử hoạt động tổng hợp sau (với MongoDB 3.4):

var order = ["food", "coffee", "grocery"],
    projection = { 
        "$addFields" : { 
            "__order" : { "$indexOfArray" : [ order, "$category" ] } 
        } 
    },
    sort = { "$sort" : { "__order" : 1 } };
db.collection.aggregate([ projection, sort]);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nhận xét truy vấn MongoDB cùng với thông tin người dùng

  2. MongoCursorTimeoutException cho hàm tổng hợp

  3. Node.js + MongoDB - findOne () trả về một trường không hoạt động

  4. MongoDB ETIMEOUT

  5. Mongo DB tìm theo tên trường với bất kỳ giá trị nào