問題タブ [mongoose-schema]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 複数レベルの移入が機能しない
最初の populate は問題ありませんが、3 番目は常にnull
. つまり、次のようなものがあります。
node.js - 特定の条件下でスキーマの検証を実行しない
いくつかの必須フィールドを持つスキーマがあります。propを使用してドキュメントを保存するときに、検証を実行せずpublished:false
にドキュメントをそのまま保存したいと考えています。後で、すべての検証を実行したいと思います。published:true
私はこれがうまくいくと思った:
しかし、これは機能していません。必要なプロパティで検証エラーが返されます。
では、一部のシナリオで検証を実行せず、別のシナリオで実行するにはどうすればよいでしょうか? これを行う最もエレガントな方法は何ですか?
mongoose - 階層参照に対するクエリ
このデータをモデル化するための最良の方法を探しています。法則のコレクションがあります。各記事には 0 段落 (段落が明示的に番号付けされていないことを意味します) またはそれ以上 (最大 5) を含めることができます。
ドキュメントは記事または特定の段落のみを参照できるため、この現在のスキーマは間違っています。法律または法律段落の 2 つの方法でドキュメント コレクションをクエリできる必要があります。
- 最初のケースでは、その法律 X (またはその段落) を参照するすべての文書を取得したいと考えています。
- 2番目のケースでは、その法律の段落を参照しているドキュメントのみが明らかに必要です(他の段落は無視します)
最初の非常に単純な解決策は、この階層データを「法律」コレクションに「平面化」し、法律と段落ごとに異なる文書を作成することです。
コレクションは次のようになります。
記事ごとのクエリを実行するには、ビジネス層で一種の大きな余分な作業が必要になるため、これは好きではありません (前述のように、「記事 1」だけでなく「記事 1 - 段落 1」も参照するドキュメントが必要です)。
編集:私はこの質問を見つけまし たフォルダー>サブフォルダー>ファイルのような階層データのMongooseスキーマ しかし、私が言ったようにパスを使用して参照を簡単に取得できるかどうかはわかりません(章とそのすべての段落または単一の段落への参照)
node.js - 条件付きでマングース フック関数をスキップする
次のように、スキーマpassword
のフィールドを暗号化するための事前保存フックがあります。User
User
このようにして、作成または更新するたびにデータベース内のパスワード文字列を暗号化しました。
User
これで、暗号化されたパスワードを含む古いデータの JSON ファイルができました。User
このモデルを使用して、JSON ファイルをデータベースにインポートしたいと考えています。
パスワードを再度暗号化するための事前保存フックを回避するにはどうすればよいですか?
javascript - オブジェクトの参照を Mongoose と Mean JS に保存する
Article スキーマと Tag スキーマがあります。そして、記事への Tag オブジェクト参照の配列を保存しようとしています。 これは私の記事のスキーマです:
そしてタグスキーマ:
フロントエンドにはコントローラーがあります。
バックエンドには、アーティクル用のコントローラーがあります。
記事にタグの配列を保存しようとすると、次のエラーが表示されます: Cast to Array failed for value "[object Object]" at path "tags" I have looking around and try multiple ways, but still not get it to storeデータベースで。フロントエンドとバックエンドのすべてのルートが適切に設定されています。
javascript - Mongoose での重複レコードの防止
私はMongoDb / Mongooseにはかなり慣れていませんが、SQL ServerまたはOracleに慣れています。
イベント用のかなり単純なスキーマがあります。
私はそれを行う2つの方法を示すMongoose Indexesを見ていました.フィールド定義を使用しました.
また、POST を受け取り、このコレクションに対して create を呼び出してレコードを挿入する、非常に単純な API もあります。
同じ pkey を持つレコードの挿入が発生しないこと、および unique:true が機能していることを確認するテストを作成しました。配列に読み取った一連のイベントが既にあるので、最初のイベントをもう一度 POST して何が起こるかを確認します。mongo DB が E11000 重複キー エラーをスローすると予想していましたが、これは起こりませんでした。
テストは失敗し、エラーはなく、重複レコードが挿入されます。
コレクションを見ると、同じ pkey を持つ 2 つのレコードが表示されます (元のレコードとテスト用に投稿したコピー)。2 番目のレコードの作成日は最初のレコードと同じですが、変更日は後であることに気付きました。
(mongo は私が最新の変更されたバージョンのレコードを使用することを期待していますか???、URL が異なり、ID も異なります)
私は、フィールド定義の unique: true がmongo dbに、これがあなたが望んでいたものであり、mongoが保存時にそれを強制したことを伝えた、または何かを誤解しただけだと思っていました...
SQL 用語では、URL ルックアップで使用できるキーを作成しますが、重複挿入を防ぐために一意の複合インデックスを作成できます。イベントのどのフィールドがレコードを一意にするかを定義できる必要があります。これは、フォーム データ POST でフォームの送信者が次に使用可能な _id 値を持っていないため、_id を使用するためです (「mongoose-auto-increment」によって行われます)。 ) のように、アプリの他の部分からの URL の使用がクリーンになるようにします。
次のような複合値の完全な混乱ではありません
コーディングを開始しようとしているので、今のところ、この単一の文字列に対して簡単なテストを作成しましたが、実際のスキーマにはさらにいくつかのフィールドがあり、一意性のためにそれらの組み合わせを使用します。テスト、フィールド、コードを追加する前に、動作をテストしてください。
2番目のレコードが実際に挿入されないようにするために私がすべきことはありますか?