2012-03-03 21 views
5

C'è questo progetto su cui sto lavorando. Questo è come un social network in cui possiamo avere utenti, post, foto ecc. E poi questo problema è venuto fuori. Siamo abituati a Mysql e al campo di incremento automatico "quasi magico" e ora non possiamo più contare su di esso. So che l'oggetto _id di Mongo offre un modo semplice per identificare un documento in quanto garantisce unicità. Ma la chiave non è facile da usare ed è quello che ci serve, in modo che possiamo fare URL del tipo:Genera ID amichevoli in MongoDb

http://website.com/posts/{post_id} 
http://website.com/{user_id} 

ho sviluppato una soluzione, ma non credo che questo è il modo migliore di fare questo. Per prima cosa creo una tabella mysql con una sola colonna. Questa colonna memorizza user_id ed è un campo di incremento automatico. Per ogni nuovo record su mongo inserisco una nuova riga in questa tabella mysql e ottengo user_id con la funzione "LAST_INSERT_ID", ora posso inserire i miei dati nella mia collezione mongo con un ID numerico. E un altro vantaggio è che posso cancellare il mio mysql table diciamo, dopo un milione di righe perché gli id ​​sono già memorizzati in mongo. Sto sbagliando?

+3

Si prevede che gli utenti a ricordare un intero? L'unica persona che conosco che se la cava è Randall, di fama xkcd, e ha solo poco più di 1000. Basta usare gli ID mongo, ma gli utenti non li memorizzano comunque. –

+1

"user friendly" è sinonimo di contenuto leggibile e comprensibile. Non ho bisogno che gli utenti lo memorizzino, ma ne ho bisogno per altri motivi. –

risposta

7

Innanzitutto, non vedo alcun vantaggio nell'utilizzare un numero di incremento automatico arbitrario sull'id generato generato da mongo. Non solo non è di nuovo solo un ID arbitrario, ma devi mantenere la sequenza.

Detto questo, perché non consentire a mongo di gestire l'id e utilizzare un altro identificatore univoco per i propri URL. Se i tuoi utenti hanno un 'nome utente', suppongo che tu abbia già fatto in modo che sia unico nella collezione. Basta interrogare per quella proprietà unica, invece di trovare per id.

Ciò consente anche all'utente di modificare il proprio identificativo univoco, senza dover rimappare associazioni nel database.

E per il post, basta generare uno slug unico dal titolo.

8

Perché non utilizzare gli slug per i post e i nomi utente per gli utenti? Dovrebbe essere leggibile dall'uomo.

+0

Devo chiedere, cos'è una lumaca? – raffian

+2

Definizione da Wikipedia: "Una lumaca è la parte di un URL che identifica una pagina usando parole chiave leggibili dall'uomo [1] [2], ad esempio" Slug_ (web_publishing) ", piuttosto che un identificatore opaco come il numero ID di il contenuto all'interno del database (ad esempio "27077911"). Gli slug vengono utilizzati per creare URL puliti (spesso per permalink) facili da digitare, descrittivi e facili da ricordare. Ad esempio, in questo URL: http: //example.org/2011/introduction-to-blogging lo slug è "introduzione al blog". " – dicarsio

Problemi correlati