Chà, không có nhiều chi tiết ở đây, nhưng tôi có thể đưa ra một trường hợp mẫu để xem xét. Hãy xem xét bộ tài liệu sau:
{ "user" : "fred", "color" : "black" }
{ "user" : "bill", "color" : "blue" }
{ "user" : "ted", "color" : "red" }
{ "user" : "ted", "color" : "black" }
{ "user" : "fred", "color" : "blue" }
{ "user" : "bill", "color" : "red" }
{ "user" : "bill", "color" : "orange" }
{ "user" : "fred", "color" : "orange" }
{ "user" : "ted", "color" : "orange" }
{ "user" : "ally", "color" : "orange" }
{ "user" : "alice", "color" : "orange" }
{ "user" : "alice", "color" : "red" }
{ "user" : "bill", "color" : "purple" }
Vì vậy, giả sử bạn muốn bong bóng các mục cho người dùng "lập hóa đơn" và "đưa" lên đầu kết quả của bạn, sau đó mọi thứ khác được sắp xếp bởi người dùng user
và color
. Những gì bạn có thể làm là chạy các tài liệu thông qua $ dự án
giai đoạn tổng hợp, như sau:
db.bubble.aggregate([
// Project selects the fields to show, and we add a weight value
{$project: {
_id: 0,
"user": 1,
"color": 1,
"weight": {$cond:[
{$or: [
{$eq: ["$user","bill"]},
{$eq: ["$user","ted"]}
]},
1,
0
]}
}},
// Then sort the results with the `weight` first, then `user` and `color`
{$sort: { weight: -1, user: 1, color: 1 }}
])
Vì vậy, những gì làm được là gán một giá trị có điều kiện cho weight
dựa trên việc user
được so khớp với một trong các giá trị bắt buộc. Các tài liệu không khớp chỉ được cung cấp một 0
giá trị.
Khi chúng tôi di chuyển đã sửa đổi này tài liệu về $ sort
pha, weight
mới key có thể được sử dụng để sắp xếp các kết quả để các tài liệu "có trọng số" ở trên cùng và mọi thứ khác sau đó sẽ theo sau.
Có một số điều bạn có thể làm với $ dự án trọng lượng theo cách này. Xem tham chiếu nhà điều hành để biết thêm thông tin:
http://docs.mongodb.org/manual/reference/operator/aggregation/