sql >> Database >  >> NoSQL >> MongoDB

Mongodb groeperen op veld met $substr

Er is een vuile maar werkende oplossing op basis van deze link http://www.kamsky.org/stupid-tricks-with-mongodb/ugly-way-to-parse-a-string-with-aggregation-framework Dus waarom niet?

Om een ​​symboolpositie in de tekenreeks te vinden, kunnen we een complexe voorwaarde bouwen om achtereenvolgens elk symbool van de tekenreeks te controleren op overeenkomend symbool. Het is in principe vergelijkbaar met hoe de indexOf-functie werkt.

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

Uw MongoDB-verzoek ziet er dus als volgt uit:

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



  1. Template Render geeft de pymongo-aggregatievariabele niet door aan de template

  2. Mongo hoe $op te zoeken met DBref

  3. Waarden ophalen als reeks elementen na $lookup

  4. Projectarray van objecten naar sleutelwaarde