Mongooseスキーマを更新/移行するためのベストプラクティス(またはツール)は、アプリケーションの進化とともにどのようになっていますか?Mongooseのスキーマ変更の扱い
答えて
更新:検査済み、これは現在の形では動作しません、その行く右のアイデアを得た、私はかなりの微調整で動作するように単一の移行を得ましたモジュール自体。しかし、いくつかの大きな変更や何らかの形でさまざまなスキーマを追跡することなく、意図したとおりに動作することはありません。
あなたはMongoDBの中に移行を処理するための最良の方法であるように思われている、あなたがそれらを使用すると、ドキュメントの古いスキーマのバージョンに移行することを意図しているマングース・データ・マイグレーションに
をしたいような音。
文書コレクション(ala alter table)で完全なデータセットの移行を実行する必要はありません。サーバーに負荷がかかり、アプリケーション/サーバーのダウンタイムが必要になる可能性があります。場合によっては、すべての文書を取得して新しいスキーマ/変更と呼び出しを適用するスクリプトを書く必要があるかもしれませんが、いつどこで行うべきかを理解する必要があります。例としては、移行スクリプトを実行するために3時間サーバーを停止するよりも、doc initへの移行ロジックを追加することでパフォーマンスが大幅に向上します。
私はこれもかなり役に立ちましたが、基本的に上記をより詳細に繰り返し、本質的に上記のノードパッケージの概念をphpで実装しています。
N.B.モジュールは5ヶ月前のフォークは0ですが、周りを見回していて、abdelsaidのレスポンススタイルよりも優れた/役立つものはありません。
しかし、MongoDBはRDBMSのスキーマの問題に対応するために生まれました。何かを移行する必要はありません。フィールドが必要な場合は、スキーマ定義にデフォルト値を設定するだけです。
new Schema({
name: { type: string }
})
へ:
new Schema({
name: { type: string },
birthplace: { type: string, required: true, default: 'neverborn' }
});
私は本当にあなたが変更管理の面を扱うことを可能にするRailsの移行のようなツールについて考えていますが、実際にはそういうものはないと私は考えています。 – mahemoff
私はあなたが意味することを知っていますが、私はドキュメントベースのデータベースでそれについてのユーティリティを見たり、間違っていますか?スキーマをMercurial/Subversion/gitのようなソース管理下に置くと、いつでも以前のリビジョンに戻ることができます。 – vimdude
私はそれがSQLデータベースと非常に異なるとは思わない。たとえば、「名前」を「名字」と「姓」フィールドに分割すると、各環境のデータベースに対してその変換を実行し、何とかそれを追跡する必要があります。 – mahemoff
私はこの問題を抱えていました。私のスキーマへの変更。いくつかの研究の後で、私はmongoコンソールでupdateMany()関数を使ってアップデートを行い、それがうまくいったと思います。
は、次のようにコードが見えるvimdudeの例にこれを適用するには:try { db.<collection>.updateMany({ birthplace: null }, { $set: {"birthplace": "neverborn" } }); } catch(e) { print(e); }
updateMany()関数は、フィルタに基づいて、コレクション内のすべてのドキュメントを更新します。この場合、フィルタは、 'birthplace'フィールドがnullのすべてのドキュメントを探しています。次に、「出生地」という名前のドキュメントに新しいフィールドを設定し、その値を 'neverborn'に設定します。あなたの状況を反映するために変更されたコードを実行した後
は、次のコマンドを実行します
db.<collection>.find().pretty()
を変更が行われたことを確認します。あなたのコレクションの各ドキュメントの最後に、 "neverborn"の値を持つ新しいフィールド "birthplace"が表示されます。
希望に役立ちます。
- 1. devとprodの間のスキーマの変更を扱う
- 2. Mongooseスキーマ対Mongo検証ツール
- 3. 変更豚スキーマ
- 4. スナップショットレプリケーションパブリッシャーのスキーマの変更
- 5. 複数のMongooseスキーマのプロパティを検証していますか?
- 6. スキーマ変更のためのSQLユーティリティスクリプト
- 7. トラックのMySQLスキーマとプロシージャの変更
- 8. SQLiteスキーマを変更する
- 9. スキーマ名を変更する
- 10. Mongoose - (MongoDB)の異なるコレクションの同じスキーマ
- 11. Percona Toolkit Vs. Openarkキット。スキーマの変更
- 12. JSONフォーマットの「説明」からオンザフライでMongooseスキーマを定義
- 13. Mongooseスキーマで複数の値を使用するユニークなドキュメント
- 14. データベースバージョン/スキーマではないデータの制御の変更?
- 15. 電話番号のスキーマ:モバイルを特別扱い
- 16. デザインの変更をどのように扱いますか?
- 17. drupalスキーマの更新
- 18. Titan DBのスキーマを変更します。削除、更新
- 19. Mongooseスキーマを検証し、カスタムエラーメッセージを表示するベストプラクティス
- 20. Mongooseモデルからスキーマ属性を取得する
- 21. 新しいスキーマの変更でLinqtoSqlデータベースを更新しますか?
- 22. 現在のスキーマから新しい新しいスキーマを指すようにweblogicデータソースを変更する方法
- 23. 複雑なスキーマにカスタムオブジェクト用のMongoose PUTを実装する際の問題
- 24. EAVとJSONとの間のスキーマの変更は?
- 25. MYSQL 5.5でスキーマ名を変更できないMYSQL Workbench
- 26. Oracleスキーマを新しいバージョンに変更する
- 27. dbスキーマを変更する方が良いですか?
- 28. Doctrine2でスキーマの変更を管理するためのワークフロー
- 29. SqlException(0x80131904):スキーマ変更後のmvc3 SaveChanges()の無効な列名
- 30. Sync Framework - スキーマ変更なしのデータの同期
少なくとも、より良いものが出現するまで受け入れる。誰もがコメントを見るわけではないので、その警告にあなたの答えを加えてください。 – mahemoff
メモを追加しました。明日これを行う必要があります。別の問題でブロックされました。 – Louis
更新されました。悲しいことに、むしろ壊れている。もしあなたが何かを見つけたら、私にここで教えてください。あなたが方法を取っていくうちに、アップデートのための適切な解決策が必要なのです。古いバージョンのスキーマを読み込んで、モジュールのような変更を許可するために、各バージョンを追跡する必要があると感じています。悲しいかな、私のマングース知識はこれまでにはかなり欠けています。アクセス! – Louis