Có một giải pháp bẩn nhưng hoạt động dựa trên liên kết này http://www.kamsky.org/stupid-tricks-with-mongodb/ugly-way-to-parse-a-string-with-aggregation-framework Vì vậy, tại sao không?
Để tìm vị trí ký hiệu trong chuỗi, chúng ta có thể xây dựng một điều kiện phức tạp để kiểm tra tuần tự từng ký hiệu của chuỗi để tìm ký hiệu phù hợp. Về cơ bản, nó tương tự như cách hoạt động của hàm indexOf.
function indexOf(field, character) {
var array = [];
var maxPos = 50;
var searchStart = 0;
array[maxPos]={"$cond":{"if":{"$eq":[{"$substr":[field,maxPos,1]},character]},"then":maxPos+1,else:0}};
for ( var i=maxPos-1; i>searchStart-1; i-- ) {
array[i]={"$cond":{"if":{"$eq":[{"$substr":[field,i,1]},character]},"then":i,"else":array[i+1]}}
}
return array[searchStart];
}
Vì vậy, yêu cầu MongoDB của bạn sẽ giống như sau:
db.images.aggregate([ <query> ,
{ $group: { _id: { $substr: ["$FileName", indexOf("$FileName", "_"), 999] }, files: { $push: "$$ROOT" } } },
{ $sort: { UploadDate : -1 } }
])