3

私は、Rails アプリを mongoid を介して mongodb を使用するように変換中です。インデックスに関して 2 つの質問があります。私は答えを知っていると思いますが、mongodb の経験が豊富な人からの確認が必要です。

Usersと の間に1 つのリレーショナル アソシエーションがある次の例を見てみましょうPosts

user.rb

class User  
    has_many_related :posts  
end

post.rb

class Post  
    belongs_to_related :user  
end

MongoHQ インターフェースを介して作成されたインデックスを見ると、次の 2 つに気付きます。

  1. キー名:_id_
    インデックス フィールド:_id
    一意: <blank>
    ID は一意であることが保証されていますか? もしそうなら、なぜユニークなセットではないのですか?そうでない場合、どうすればこれを設定できますか? また、設定する必要がありますか?

  2. キー名:user_id_1
    インデックス付きフィールド:user_id
    一意:false
    インデックス付きフィールドがコレクション内のフィールド名であると仮定するのは正しいですか? _1キー名の後にあるので確認したいだけです。

4

3 に答える 3

3

はい、_idMongoDB では常に一意です。これは主キーであるため、設定UNIQUEは必要ありません。

于 2010-06-27T23:35:18.300 に答える
2

これは、MongoDB Indexing Overviewで非常に明確に説明されているインデックスです。

_id

_id インデックスは _id フィールドの一意のインデックス**であり、MongoDB はデフォルトですべてのコレクションにこのインデックスを作成します。_id のインデックスは削除できません。

_id フィールドはコレクションの主キーであり、すべてのドキュメントには一意の _id フィールドが必要です。_id フィールドには任意の一意の値を格納できます。_id のデフォルト値は、すべての insert() の ObjectID です。

** _id のインデックスは一意ですが、mongo シェルでは getIndexes() メソッドは unique: true を出力しません。

于 2012-10-12T10:38:53.673 に答える
1

MongoDB で _id 値を手動で指定しない場合、型は 12 バイトのバイナリ値で構成される特別な BSON データ型に設定されます。

12 バイトの値は、4 バイトのタイムスタンプ、3 バイトのマシン ID、2 バイトのプロセス ID、および 3 バイトのカウンターで構成されます。この設計により、この値は一意である可能性が非常に高くなります。

参照: MongoDB の決定版ガイド: クラウドおよびデスクトップ コンピューティングのための NoSQL データベース (書籍)

于 2012-02-16T06:48:00.650 に答える