MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb grupuj według pola za pomocą $substr

Istnieje brudne, ale działające rozwiązanie oparte na tym łączu http://www.kamsky.org/stupid-tricks-with-mongodb/ugly-way-to-parse-a-string-with-aggregation-framework Dlaczego więc nie?

Aby znaleźć pozycję symbolu w ciągu, możemy zbudować złożony warunek, aby kolejno sprawdzać każdy symbol ciągu pod kątem pasującego symbolu. Jest to w zasadzie podobne do działania funkcji 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];
}

Twoje żądanie MongoDB będzie więc wyglądać tak:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb geoNear vs near

  2. Jak mogę poczekać na uruchomienie kontenera Dockera?

  3. Mongoose, Wybierz określone pole za pomocą wyszukiwania

  4. Can kafka connect - źródło mongo działa jako klaster (max.tasks> 1)

  5. Unikalny indeks rzadki Mongodb