sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb gruppera efter fält med $substr

Det finns en smutsig men fungerande lösning baserad på denna länk http://www.kamsky.org/stupid-tricks-with-mongodb/ugly-way-to-parse-a-string-with-aggregation-framework Så varför inte?

För att hitta en symbolposition i strängen kan vi bygga ett komplext villkor för att sekventiellt kontrollera varje symbol i strängen för matchande symbol. Det liknar i princip hur indexOf-funktionen fungerar.

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];
}

Så din MongoDB-förfrågan kommer att se ut så här:

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



  1. Returnera specifik array från objektsamlingen

  2. Kan inte ansluta till fjärransluten mongodb-server

  3. Skapa anpassat objekt-ID i MongoDB

  4. Mapreduce i mongodb ruby ​​infödd drivrutin