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.