Het is mogelijk om zo ongeveer alles server-side te doen met mongodb. De reden dat je meestal 'nee' hoort, is dat je te veel snelheid opoffert om het onder normale omstandigheden logisch te maken. Een van de belangrijkste krachten achter PyMongo, Mike Dirolf met 10gen, heeft hier een goede blogpost over het gebruik van server-side javascript met pymongo:http://dirolf.com/2010/04/05/stored-javascript-in-mongodb-and-pymongo.html . Zijn voorbeeld is voor het opslaan van een javascript-functie om de som van twee velden te retourneren. Maar u kunt het eenvoudig wijzigen om de eerste letter van uw gebruikersnaamveld terug te geven. De essentie zou zoiets zijn als:
db.system_js.first_letter = "function (x) { return x.charAt(0); }"
Begrijp echter eerst dat mongodb is gemaakt om echt goed te zijn in het ophalen van uw gegevens, niet echt goed in het verwerken ervan. De aanbeveling (zie bijvoorbeeld 50 tips en trucs voor mongodb-ontwikkelaars van Kristina Chodorow van Oreilly) is om te doen waar Andrew hierboven kort op gezinspeeld heeft:een eerste letterkolom maken en die in plaats daarvan terugsturen. Elke verwerking kan efficiënter worden gedaan in de applicatie.
Maar als u vindt dat zelfs het opvragen van de volledige naam voordat u volledige naam[0] retourneert vanuit uw 'weergave' een te groot veiligheidsrisico is, hoeft u niet alles op de snelst mogelijke manier te doen. Ik had een tijdje kaartverkleining in Mongodb vermeden vanwege alle publieke zorgen over snelheid. Toen liet ik mijn eerste kaartverkleining uitvoeren en draaide mijn duimen gedurende 0,1 seconden terwijl het 80.000 10.000 documenten verwerkte. Ik realiseer me in het geheel van dingen, dat is klein. Maar het illustreert dat alleen omdat het slecht is voor een enorme website om een prestatiehit te hebben op een of andere server-side verwerking, dit niet betekent dat het voor jou van belang is. In mijn geval kan ik me voorstellen dat het me iets langer zou kosten om naar Hadoop te migreren dan om af en toe die 0,1 seconde te eten. Veel succes met je site