A única diferença é que um é na verdade um
ObjectId
e o outro é uma representação de string do que parece ser um ObjectId
. DBRef como um ObjectId:
db.persons.insert({name: 'cavin',
sister: new DBRef('persons',
new ObjectId('5165419064fada69cef33ea2'))}) // use an ObjectId
DBRef como uma String:
db.persons.insert({name: 'bob',
sister: new DBRef('persons',
'5165419064fada69cef33ea2')}) // use a string
No exemplo que você incluiu, o
ObjectId
formato pode resultar em um armazenamento mais eficiente, pois é um valor de 12 bytes em vez dos 24 bytes que a representação de string exigiria. Se você quiser usar DBRef
s, eu usaria um ObjectId
se a coleção referenciada estiver usando ObjectId
s para o _id
. Você não é obrigado a usar um
ObjectId
em um DBRef
. Pode ser qualquer valor que represente a chave (_id
) da coleção/DB relacionada. Conforme a documentação sugere, a menos que você tenha uma razão convincente para usar um
DBRef
, use referências manuais.