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.