web-dev-qa-db-ja.com

MongoDBの「id」フィールドと「_id」フィールドの違い

MongoDBドキュメントのフィールドIDまたは_IDを使用することに違いはありますか?

私は通常「_id」を使用するため、これを求めていますが、ドキュメントではこのソート({id:-1})を見ました: http://www.mongodb.org/display/DOCS/Optimizing+ Object + IDs#OptimizingObjectIDs-Sortbyidtosortbyinsertiontime

[〜#〜] edit [〜#〜]

ドキュメントが間違っていたことが判明しました。

66
Arthur Neves

私はそれがドキュメントの単なる誤植だと思っています。 _idフィールドは、すべてのドキュメントの主キーです。それは呼ばれています _idおよびidからもアクセスできます。 idキーを使用しようとすると、illegal ObjectId formatエラー。

このセクションは、自動的に生成されたObjectIDがタイムスタンプで始まることを示しているだけなので、ドキュメントを自動的に並べ替えることができます。 _idは、すべてのコレクションで自動的に索引付けされます。詳細については、 http://www.mongodb.org/display/DOCS/Object+IDs を参照してください。特に「BSON ObjectID Specification」の下。

BSON ObjectIDは、4バイトのタイムスタンプ(エポックからの秒数)、3バイトのマシンID、2バイトのプロセスID、および3バイトのカウンターで構成される12バイトの値です。タイムスタンプおよびカウンタフィールドは、BSONの他の部分とは異なり、ビッグエンディアンに保存する必要があることに注意してください。

55
Leonard Garvey

_idフィールドは、Bson ObjectIdのデフォルトフィールドであり、デフォルトでインデックスが作成されます。

_idとidは同じではありません。必要に応じてidというフィールドを追加することもできますが、インデックスを追加しない限り、インデックスにはなりません。

これはドキュメントの単なる誤植です。

13

idはmongoid.idの_idのエイリアスで、ドキュメントの_idを返します。 https://github.com/mongodb/mongoid/blob/master/lib/mongoid/fields.rb#L47

_idフィールドが指定されていない場合、ObjectedIdが自動的に生成されます。

5
tessie

私の2セント:

_idフィールド

MongoDB_idフィールドを各ドキュメントに割り当て、そのドキュメントにプライマリインデックスを割り当てます。セカンダリインデックスを適用する方法もあります。デフォルトでは、MongoDBObjectID型の_idフィールドの値を作成します。この値はBSON仕様で定義されており、次のように構成されています。

ObjectID(12バイトの16進文字列)=日付(4バイト、Unixエポックからの秒数を表すタイムスタンプ値)+ MACアドレス(3バイト)+ PID(2バイト)+カウンター(3バイト)

2
student