Den enda skillnaden är att man faktiskt är ett ObjectId
och den andra är en strängrepresentation av vad som ser ut att vara ett ObjectId
.
DBRef som ObjectId:
db.persons.insert({name: 'cavin',
sister: new DBRef('persons',
new ObjectId('5165419064fada69cef33ea2'))}) // use an ObjectId
DBRef som en sträng:
db.persons.insert({name: 'bob',
sister: new DBRef('persons',
'5165419064fada69cef33ea2')}) // use a string
I exemplet du inkluderade, ObjectId
format kan resultera i effektivare lagring eftersom det är ett 12-byte-värde istället för de 24 byte som strängrepresentationen skulle kräva. Om du ville använda DBRef
s, jag skulle använda ett ObjectId
om den refererade samlingen använder ObjectId
s för _id
.
Du behöver inte använda ett ObjectId
i en DBRef
. Det kan vara vilket värde som helst som representerar nyckeln (_id
) av den relaterade samlingen/DB.
Som dokumentationen
föreslår, om du inte har en övertygande anledning till att använda en DBRef
, använd manuella referenser istället.