モジュール: Mongoid::Tasks::Database

次による拡張機能。
Database
次のドキュメントに含まれます。
Database
定義:
build/mongoid- 8.1 /lib/mongoid/tasks/database.rb

インスタンス メソッドの概要を折りたたむ

インスタンス メソッドの詳細

create_collections (models = ::Mongoid.models, force: false)=オブジェクト

提供されたグローバルと クラスが埋め込まれていない場合、各モデルのコレクションを作成します。

パラメーター:

  • モデル。 配列未満Mongoid >

    どのコレクションを作成する必要があるドキュメント クラスの配列。 アプリケーション内のすべてのドキュメント クラスにデフォルト設定されます。

  • true | false (デフォルトはfalse

    true の場合、メソッドは新しいコレクションを作成する前に既存のコレクションを削除します。 false の場合、メソッドは新しいコレクション(データベースに存在しないコレクション)のみを作成します。



17
18
19
20
21
22
23
24
25
26
ファイル 'Build/mongoid- 8.1 /lib/mongoid/tasks/database.rb', 行17

デフォルト create_collections(モデル = ::Mongoid.モデル, 強制します。 false)
  モデル. 行う |モデル|
    場合 !モデル.埋め込み || モデル.定期的か
      モデル.create_collection(強制します。 )
      logger.info(" MONGOID: #{ model }のコレクションを作成しました: ")
    else
      logger.info(" MONGOID: コレクション オプションは#{モデル}では無視されます。ルート モデルで を定義してください)
    end
  end
end

# create_indexs (モデル = ::Mongoid.models) 詳しく は、 配列 を参照してください<Class>

提供されたグローバルと クラスが埋め込まれていない場合、各モデルのインデックスを作成します。

例:

すべてのインデックスを作成します。

Mongoid::Tasks::Database.create_indexes

次の値を返します。

  • <Class>配列 )

    インデックス付きモデル。



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
ファイル 'Build/mongoid- 8.1 /lib/mongoid/tasks/database.rb', 行35

デフォルト create_indexes(モデル = ::Mongoid.モデル)
  モデル. 行う |モデル|
    次へ 場合 モデル.インデックス_仕様.空の場合
    場合 !モデル.埋め込み || モデル.定期的か
      モデル.create_indexes
      logger.info(" MONGOID: #{ model }にインデックスを作成しました: ")
      モデル.インデックス_仕様. 行う |スペック|
        logger.info(" MONGOID: インデックス: #{ spec . key } 、オプション: #{ spec . options } ")
      end
      モデル
    else
      logger.info(" MONGOID: で無視されるインデックス: #{ model }は、ルート モデルで を定義してください)
      nil
    end
  end.compact
end

#排除_インデックス(モデル = :: Mongoid.models ) 詳しく は、 配列 を参照してください<Class>

提供されたグローバルと クラスが埋め込まれていない場合、各モデルのインデックスを削除します。

例:

すべてのインデックスを削除します。

Mongoid::Tasks::Database.remove_indexes

次の値を返します。

  • <Class>配列 )

    インデックスが作成されていないモデル。



112
113
114
115
116
117
118
119
120
121
122
ファイル 'Build/mongoid- 8.1 /lib/mongoid/tasks/database.rb', 行112

デフォルト remove_indexes(モデル = ::Mongoid.モデル)
  モデル. 行う |モデル|
    次へ 場合 モデル.埋め込み
    begin
      モデル.remove_indexes
    ヘルプ mongo::エラー::OperationFailure
      次へ
    end
    モデル
  end.compact
end

#remove_undefined_indexs (モデル = ::Mongoid.models) → Hash{Class => Array(Hash)}

データベースに存在するがモデルに指定されていないインデックスを削除します。

例:

未定義のインデックスを排除しました。

Mongoid::Tasks::Database.remove_undefined_indexes

次の値を返します。

  • Hash{Class => Array(Hash)}

    モデル別に削除されたインデックスのリスト。



91
92
93
94
95
96
97
98
99
100
101
102
103
ファイル 'Build/mongoid- 8.1 /lib/mongoid/tasks/database.rb', 行91

デフォルト delete_undefined_indexs(モデル = ::Mongoid.モデル)
  undefined_indexs(モデル). 行う |モデル, indexes|
    indexes. 行う |index|
      キー = index['key'].refine_keys
      コレクション = モデル.コレクション
      コレクション.indexes(セッション: モデル.送信(:_session)).drop_one(キー)
      logger.info(
        " MONGOID: コレクションのインデックス ' #{インデックス[ ' name ' } } ' を削除しまし +
        " データベース  " #{ コレクション . 名前 } ' がデータベース ' #{ コレクション . データベース . 名前 } ' の
      )
    end
  end
end

# shard_collections (モデル = ::Mongoid.models) 詳しく は、 配列 を参照してください<Class>

シャードキーを宣言するモデルのシャード コレクション。

このメソッドを呼び出す前にコレクションがすでにシャーディングされていたモデル クラスを含む、コレクションがシャーディングされたモデル クラスを返します。

例:

すべてのコレクションをシャーディングする

Mongoid::Tasks::Database.shard_collections

次の値を返します。

  • <Class>配列 )

    シャーディングされたモデル



134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
ファイル 'Build/mongoid- 8.1 /lib/mongoid/tasks/database.rb', 行134

デフォルト shard_collections(モデル = ::Mongoid.モデル)
  モデル.map 行う |モデル|
    次へ 場合 モデル.shard_config.nil?

    場合 モデル.埋め込み & & !モデル.定期的か
      logger.WARN(" MONGOID: #{ model }はシャード構成を持っていますが、埋め込まれています")
      次へ
    end

    ただし、 モデル.コレクション.クラスター.シャーディングされたかどうか
      logger.WARN(" MONGOID: #{ model }はシャード構成を持っていますが、シャーディングされたクラスターには永続的ではありません#{ model . collection . cluster . Summary } ")
      次へ
    end

    コレクションの#データベースは、collStats を実行するために存在する必要があります。
    サーバーのバージョンに応じて、コレクション自体も必要です
    存在します。
    # MongoDB にはデータベースを作成するコマンドが ありません 。最高
    必要なコレクションを作成するためのものです。
    #古いサーバーでは、すでに存在するコレクションを作成するのが
    # エラー。
    # さらに、 3.6および古い可能性のあるサーバーでは、
    # 存在しないコマンドを実行するように要求された場合のエラー コード
    コレクション( https://JIRA.mongodb.org/browse/SERVER- 50070 )。
    begin
      stats = モデル.コレクション.database.コマンド(collStats: モデル.コレクション.name).最初に
    ヘルプ mongo::エラー::OperationFailure => 除外
      コード26はデータベース # が存在しない場合です。
      コード8は、 4.0のようにコレクションが存在しません。
      3.6以前の場合は、例外メッセージのテキストと一致します。
      場合 除外.コード == 26 || 除外.コード == 8 ||
        除外.コード.nil? & & 除外.メッセージ =~ /見つかりません/
      次に
        モデル.コレクション.create

        stats = モデル.コレクション.database.コマンド(collStats: モデル.コレクション.name).最初に
      else
        発生
      end
    end

    stats = モデル.コレクション.database.コマンド(collStats: モデル.コレクション.name).最初に
    場合 stats[:sharded]
      logger.info(" MONGOID: #{モデル.コレクション.名前空間}はすでに#{モデル}でシャーディングされています")
      次へ モデル
    end

    admin_db = モデル.コレクション.クライアント.使用(:admin).database

    begin
      admin_db.コマンド(enableSharding: モデル.コレクション.database.name)
    ヘルプ mongo::エラー::OperationFailure => 除外
      シャーディングがすでに有効になっている場合、サーバー2.6は失敗します
      場合 除外.コード == 23 || 除外.コード.nil? & & 除外.メッセージ =~ /はすでに有効になっています/
        # 何もない
      else
        発生
      end
    end

    begin
      admin_db.コマンド(shardCollection: モデル.コレクション.namespace, **モデル.shard_config)
    ヘルプ mongo::エラー::OperationFailure => e
      logger.エラー(" MONGOID: #{ モデル } のコレクション # { { モデル . コレクション . 名前 空間 } の シャードに失敗しました : #{ e . クラス } : #{ e } ")
      次へ
    end

    logger.info(" MONGOID: #{ モデル } のシャーディングされたコレクション # { { モデル . コレクション . 名前 空間 } } ")

    モデル
  end.compact
end

#undefined_indexs (モデル = ::Mongoid.models) 詳しく は、 配列 を ハッシュ します。<Hash>

データベースに存在するがモデルに指定されていないインデックスのリストをモデル別に返します。

例:

未使用のインデックスのリストを返します。

Mongoid::Tasks::Database.undefined_indexes

次の値を返します。

  • <Hash>配列 )

    モデル別の未定義インデックスのリスト。



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
ファイル 'Build/mongoid- 8.1 /lib/mongoid/tasks/database.rb', 行59

デフォルト undefined_indexs(モデル = ::Mongoid.モデル)
  undefined_by_model = {}

  モデル. 行う |モデル|
    ただし、 モデル.埋め込み
      begin
        モデル.コレクション.indexes(セッション: モデル.送信(:_session)). 行う |index|
          # ignore default index
          ただし、 index[' name '] == '_id_'
            キー = index['key'].refine_keys
            スペック = モデル.インデックス_仕様(キー, index[' name '])
            ただし、 スペック
              # インデックスは指定されていない
              undefined_by_model[モデル] ||= []
              undefined_by_model[モデル] < index
            end
          end
        end
      ヘルプ mongo::エラー::OperationFailure; end
    end
  end

  undefined_by_model
end