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

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

Overview

データベース コレクション、インデックス、シャーディングなどを管理するためのユーティリティ モジュール。Rake タスクから呼び出されます。

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

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

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

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

パラメーター:

  • モデル。 配列未満Mongoid >

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

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

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



21
22
23
24
25
26
27
28
29
30
31
32
33
# ファイル 'lib/mongoid/tasks/database.rb' の場合、 21行

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

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

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

例:

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

Mongoid::Tasks::Database.create_indexes

次の値を返します。

  • <Class>配列 )

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



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# ファイル 'lib/mongoid/tasks/database.rb' の場合、 42行

デフォルト 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

create_search_indexs (モデル = ::Mongoid.models、 wait: true) =オブジェクト

検索インデックスを作成するためのリクエストを送信します。 これは非同期で行われます。 wait が true の場合、インデックスが作成されるまで待機します。

パラメーター:

  • モデル 配列未満Mongoid > (デフォルトは::Mongoid.models

    検索インデックスを構築するモデル

  • 待機する true | false (デフォルトはtrue

    インデックスが構築されるまで待機するかどうか。



67
68
69
70
71
72
73
74
75
76
77
# ファイル 'lib/mongoid/tasks/database.rb' の場合、 67行

デフォルト create_search_indexes(モデル = ::Mongoid.モデル, wait: true)
  検索可能な = モデル.選択する { |m| m.search_index_specs.any? }

  検索インデックス作成リクエストをキューに入れます
  index_names_by_model = 検索可能な.each_with_object({}) 行う |モデル, obj|
    logger.info(" MONGOID: #{モデル}で検索インデックスを作成しています... ")
    obj[モデル] = モデル.create_search_indexes
  end

  wait_for_search_indexs(index_names_by_model) 場合 待機する
end

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

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

例:

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

Mongoid::Tasks::Database.remove_indexes

次の値を返します。

  • <Class>配列 )

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



139
140
141
142
143
144
145
146
147
148
149
# ファイル 'lib/mongoid/tasks/database.rb' の場合、 139行

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

#remove_search_indexs (モデル = ::Mongoid.models) =オブジェクト

指定されたモデルからすべての検索インデックスを削除します。



155
156
157
158
159
160
# ファイル 'lib/mongoid/tasks/database.rb' の場合、 155行

デフォルト delete_search_indexs(モデル = ::Mongoid.モデル)
  モデル. 行う |モデル|
    次へ 場合 モデル.埋め込み
    モデル.delete_search_indexs
  end
end

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

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

例:

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

Mongoid::Tasks::Database.remove_undefined_indexes

次の値を返します。

  • Hash{Class => Array(Hash)}

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



118
119
120
121
122
123
124
125
126
127
128
129
130
# ファイル 'lib/mongoid/tasks/database.rb' の場合、 118行

デフォルト 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>配列 )

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



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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# ファイル 'lib/mongoid/tasks/database.rb' の場合、 172行

デフォルト 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>配列 )

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



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# ファイル 'lib/mongoid/tasks/database.rb' の場合、 86行

デフォルト 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