L'unica differenza è che uno è in realtà un ObjectId e l'altro è una rappresentazione di stringa di quello che sembra essere un ObjectId .
DBRef come ObjectId:
db.persons.insert({name: 'cavin',
sister: new DBRef('persons',
new ObjectId('5165419064fada69cef33ea2'))}) // use an ObjectId
DBRef come stringa:
db.persons.insert({name: 'bob',
sister: new DBRef('persons',
'5165419064fada69cef33ea2')}) // use a string
Nell'esempio che hai incluso, ObjectId format potrebbe comportare un'archiviazione più efficiente in quanto è un valore di 12 byte invece dei 24 byte richiesti dalla rappresentazione della stringa. Se volevi usare DBRef s, userei un ObjectId se la raccolta di riferimento utilizza ObjectId s per il _id .
Non è necessario utilizzare un ObjectId in un DBRef
. Può essere qualsiasi valore che rappresenti la chiave (_id ) della relativa raccolta/DB.
Come la documentazione
suggerisce, a meno che tu non abbia un motivo convincente per utilizzare un DBRef , usa invece i riferimenti manuali.