2

文字列またはオブジェクト ID を使用しDBRefて mongodb を構築できることに気付きました。例えば

db.persons.insert({name: 'alice'})
db.persons.find()
// { "_id" : ObjectId("5165419064fada69cef33ea2"), "name" : "alice" }
db.persons.insert({name: 'bob', sister: new DBRef('persons', '5165419064fada69cef33ea2')}) // use a string
db.persons.find()
// { "_id" : ObjectId("5165419064fada69cef33ea2"), "name" : "alice" }
// { "_id" : ObjectId("516541c064fada69cef33ea3"), "name" : "bob", "sister" : { "$ref" : "persons", "$id" : "5165419064fada69cef33ea2" } }
db.persons.insert({name: 'cavin', sister: new DBRef('persons', new ObjectId('5165419064fada69cef33ea2'))}) // use an ObjectId
db.persons.find()
// { "_id" : ObjectId("5165419064fada69cef33ea2"), "name" : "alice" }
// { "_id" : ObjectId("516541c064fada69cef33ea3"), "name" : "bob", "sister" : { "$ref" : "persons", "$id" : "5165419064fada69cef33ea2" } }
// { "_id" : ObjectId("516541e464fada69cef33ea4"), "name" : "cavin", "sister" : { "$ref" : "persons", "$id" : ObjectId("5165419064fada69cef33ea2") } }

何が違うのか、どちらの方法が好ましいのか誰か教えてもらえますか?

4

2 に答える 2

0

ObjectId 長所

  • タイムスタンプが埋め込まれています。

  • これはデフォルトの Mongo _id タイプです。どこにでもある

  • 他のアプリやドライバーとの相互運用性

ObjectId 短所

  • これはオブジェクトであり、実際に操作するのは少し難しくなります。

  • 文字列を new ObjectId() でラップするのを忘れる場合があります

  • _id の一意性を維持するには、サーバー側のオブジェクトの作成が必要です

  • これにより、minimongo によるクライアント側での生成が問題になります

弦のプロ

  • 開発者はドメイン固有の _id トポロジを作成できます

文字列の短所

  • 開発者は_idsの一意性を確保する必要があります

  • findAndModify() および getNextSequence() クエリが無効になる場合があります

于 2015-12-30T05:53:55.067 に答える