2010-11-14 6 views
15

Per esempio ...È corretto utilizzare "ID oggetto" di Mongo come identificativo univoco? In tal caso, come posso convertirlo in una stringa e cercarlo per stringa?

user/view/?id=324gijsdfi3h25o1 

posso str() ... ma ...

Come posso find in su da stringa?

Modifica: voglio che ogni documento in Mongo abbia un identificativo univoco (di solito una stringa) che posso controllare. Speravo che l'ID oggetto potesse essere questo (dal momento che ha un sacco di lettere ed è unico). E voglio che funzioni con HTTP GET. view? uid = e93jfsb0e3jflskdjf

+0

Puoi chiarire la domanda fornendo ciò che i documenti non rispondono per te: http://www.mongodb.org/display/DOCS/Object+IDs –

risposta

17

È possibile costruire un nuovo ObjectId utilizzando la stringa. Questo esempio utilizza la console MongoDB:

db.users.find({ _id: ObjectId("4cdfb11e1f3c000000007822") }) 

Non posso dire dalla tua domanda quale driver la lingua in uso (se non del tutto), ma la maggior parte dei driver anche supportare questa funzionalità.

NON convertire il ObjectId nel database in una stringa e quindi confrontarlo con un'altra stringa. Se lo fai, MongoDB non può utilizzare l'indice _id e dovrà eseguire la scansione di tutti i documenti, con conseguente scarse prestazioni delle query.

+2

In quale altro modo dovrei confrontarlo con altre stringhe, se non lo faccio usare l'ObjectID come identificativo univoco? – TIMEX

+0

@TIMEX: cosa intendi? Potresti aggiornare la tua domanda per spiegare esattamente cosa stai cercando di ottenere? –

+2

Voglio che ogni documento in Mongo abbia un identificatore univoco (di solito una stringa) su cui posso cercare.Speravo che l'ID oggetto potesse essere questo (dal momento che ha un sacco di lettere ed è unico). Sto costruendo un blog e voglio che funzioni con HTTP GET. visualizzare? uid = e93jfsb0e3jflskdjf – TIMEX

12

alle vostre domande:

E 'ok per utilizzare “Object ID” di Mongo come il suo identificatore univoco?

Sì, è destinato a questo scopo. Realizzare ID univoci può essere un problema in ambienti di grandi dimensioni, quindi MongoDB fa questo per te.

Se è così, come posso convertirlo in una stringa e cercarlo per stringa?

No. Non è una stringa. MongoDB ti consente in realtà di ignorare l'ID predefinito. Quindi, se inizi a cercare #"4cdfb11e1f3c000000007822", Mongo pensa che stai cercando una stringa. Se invece si cerca ObjectId("4cdfb11e1f3c000000007822"), Mongo cercherà l'ObjectId (o MongoID).

Nella tua domanda, sembra che tu stia cercando di passarlo come una stringa. Il modo in cui lo converti in un "objectid" dipenderà dal tuo driver. PHP ha un MongoId. Altri driver hanno una funzione simile.

0

ObjectId è un modo pratico per generare un _id univoco, ma sei libero di farlo da solo. Per il tuo esempio,

var o = {_id: Math.random().toString(36).substring(10)}; 
collection.insert(o, handleCollision); 

funziona bene, anche se devi gestire le collisioni da solo. Quindi è possibile utilizzare i confronti diretti delle stringhe secondo necessità.

Problemi correlati