Tôi không nghĩ rằng có bất kỳ cách nào dễ dàng để làm điều này, nếu bạn thực sự muốn thì hãy thử $cond
nhà điều hành để kiểm tra tình trạng trên trường cụ thể,
- thêm trường mới
matchResult
trong$project
nó sẽ kiểm tracreatedBy
đang khớp với trả về 1 nếu không thì 0, -
$sort
bởimatchResult
theo thứ tự giảm dần
const [messages, messageCount] = await Promise.all([
MessageModel.aggregate([
{ $match: params },
{
$project: {
...filterObject,
matchResult: {
$cond: [
{ $eq: ["$createdBy", ObjectId("abcff9ef71fa048cea3c8a97")] },
1,
0
]
}
}
},
{ $sort: { matchResult: -1 } },
{ $skip: ctx.paginate.skip },
{ $limit: ctx.query.limit }
]),
MessageModel.countDocuments(params),
]);
Tùy chọn thứ hai là $ regexMatch toán tử tổng hợp bắt đầu từ MongoDB v4.2,