Der einzige Unterschied besteht darin, dass es sich tatsächlich um eine ObjectId handelt und der andere ist eine Zeichenfolgendarstellung dessen, was wie eine ObjectId aussieht .
DBRef als ObjectId:
db.persons.insert({name: 'cavin',
sister: new DBRef('persons',
new ObjectId('5165419064fada69cef33ea2'))}) // use an ObjectId
DBRef als String:
db.persons.insert({name: 'bob',
sister: new DBRef('persons',
'5165419064fada69cef33ea2')}) // use a string
In dem von Ihnen eingefügten Beispiel die ObjectId -Format könnte zu einer effizienteren Speicherung führen, da es sich um einen 12-Byte-Wert anstelle der 24 Bytes handelt, die die Zeichenfolgendarstellung erfordern würde. Wenn Sie DBRef verwenden möchten s würde ich eine ObjectId verwenden wenn die referenzierte Sammlung ObjectId verwendet s für die _id .
Sie müssen keine ObjectId verwenden in einem DBRef
. Es kann ein beliebiger Wert sein, der den Schlüssel darstellt (_id ) der zugehörigen Sammlung/DB.
Als Dokumentation
schlägt vor, es sei denn, Sie haben einen zwingenden Grund für die Verwendung eines DBRef , verwenden Sie stattdessen manuelle Referenzen.