MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongodb raggruppa per campo usando $substr

C'è una soluzione sporca ma funzionante basata su questo link http://www.kamsky.org/stupid-tricks-with-mongodb/ugly-way-to-parse-a-string-with-aggregation-framework Allora, perché no?

Per trovare la posizione di un simbolo nella stringa, possiamo costruire una condizione complessa per controllare in sequenza ogni simbolo della stringa per la corrispondenza del simbolo. È fondamentalmente simile a come funziona la funzione 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];
}

Quindi, la tua richiesta MongoDB sarà simile a questa:

db.images.aggregate([ <query> ,
             { $group: { _id: { $substr: ["$FileName", indexOf("$FileName", "_"), 999] }, files: { $push: "$$ROOT" } } },
             { $sort: { UploadDate : -1 } }
        ])