問題タブ [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 - 1 対多の Mongoose 関係 - 参照を保存する場所
私は新しいプロジェクトの MongoDB コレクション アーキテクチャを設計しています。MongoDB は初めてなので、1 対多の関係について質問がありました。
この例では、関係がデータセンター対サーバーであるとします。つまり、1 つのデータセンターには複数のサーバー (アプリでは数千) を配置でき、サーバーは 1 つのデータセンターにのみ属することができます。
Servers._datacenterを参照するのが最善でしょうDatacenter._idか? または、サーバー ID を格納するDatacenter.servers 配列ですか?
どのサーバー ID が関連付けられているかを参照するためにデータセンター ドキュメントに配列を含めることをお勧めする場合は、サーバー ID だけでサーバーが属しているデータセンターを見つける方法はありますか? (クイックwhere serverId in Datacenter.serversクエリのようなものです)すべてのデータセンターにクエリを実行する必要がなく、すべての Datacenter.servers 配列で ID を確認します
Servers ドキュメントに、それが属するデータセンターを参照する要素を含めることをお勧めする場合、Datacenter を照会し、関連付けられているすべてのサーバー ドキュメントを仮想 Documents.servers 配列などに返す方法はありますか?
各データセンターには非常に大量のサーバーが存在する可能性があるため、どの方法が最適かはよくわかりませんが、各データセンタードキュメント内にそのような大きな配列を持たない方がよいと思います...しかし次に、各サーバー ドキュメントで親データセンターが参照されるように設定すると、クエリがかなり難しくなります (または、そうでない場合は、まだ発見していない非常に簡単な方法があるかもしれません。Mongo は初めてだと言いました)。 )
私はこのドキュメントを読んでいて、参照方向をどちらかの方向に設定する方法を示しており、次のように述べています。
配列が変更可能で大きくなるのを避けるには、ブック ドキュメント内に出版社の参照を保存します。
そのため、サーバー ドキュメントでデータセンター ID を参照するのが最善だと思います。その場合、すべてのサーバー ドキュメントをデータセンター ドキュメント内の配列として返す方法はありますか? または、データセンターを照会してから、その Datacenter._id を持つすべてのサーバーを照会してから、マージされたオブジェクトを返す必要があります..
node.js - Mongoose の既定値は既存のドキュメントに適用されますか?
プロパティを Mongoose スキーマに追加してデフォルト値を指定した場合、既存のドキュメントはロード時にこれらのデフォルト値を受け取りますか?
node.js - Mongooseでスキーマの移行を処理するには?
以下のようなスキーマを作成しました
上記の Location 属性の unique:trueは間違っています。その後、unique:true を削除してデータを追加しようとしましたが、それでも次のエラーがスローされます。
これを解決する方法とスキーマを処理する方法 さらにフィールドを追加したい場合は?
node.js - Mongoose スキーマ検証でクエリを実行する
projectsコレクションとコレクションがあるように MongoDB 設計をセットアップしようとしていますpeople。Projectモデル スキーマには、モデルを参照するアイテムが含まれてい_peopleますPeople。(彼/彼女が属するプロジェクトを参照するためのフィールドを持つ People モデルとは対照的に、このようにする必要があります)
peopleコンテナー内に新しいドキュメントが作成されるたびに、プロジェクトごとに 1 つのマネージャーしか存在できないことを検証する必要があります。スキーマで要素検証のクエリを実行できれば、これは非常に簡単ですが、それが可能だとは思いません...
People現在のモデルのスキーマは次のとおりです。
isManager.validate.validator関数でわかるように、このドキュメントが true に設定されている場合、マネージャーでもある同じプロジェクトによって参照されてisManagerいるドキュメントがまだ存在しないことを確認する方法を見つける必要があることに注意しました。person
どのプロジェクトがこのドキュメントを参照しているかを知ることは問題ではありません。どこかにそれがあるでしょう。クエリを実行する方法を知る必要があるだけです..それは可能ですか?
node.js - 新しいドキュメントとして保存せずに、Mongoose スキーマに対してオブジェクトを検証する
新しいドキュメントに挿入されるデータを検証しようとしていますが、他の多くのことが必要になる前ではありません。そのため、モデル スキーマに対して配列内のオブジェクトを検証する関数を静的メソッドに追加するつもりでした。
これまでのコードは次のとおりです。
だからpeopleSchema.statics.validatePeople私は検証をしようとしているところです。私はマングースの検証ドキュメントを読みましたが、データを保存せずにモデルに対して検証する方法については述べていません。
これは可能ですか?
アップデート
ここでの回答の 1 つは、動作しているように見える適切な検証方法を示していましたが、現在はUnhandled rejection ValidationError.
データを検証するために使用される静的メソッドを次に示します(挿入せずに)
それから私はそれをテストします:
スキーマ ルールに従わないデータでテストすると、エラーがスローされます。ご覧のとおり、キャッチしようとしましたが、うまくいかないようです。
PS私は私の約束のためにBluebirdを使用しています
node.js - マングースでスキーマにアタッチされたメソッドにアクセスするにはどうすればよいですか
作業中のプロジェクトのスキーマにアタッチしたメソッドの呼び出しに関して混乱が生じています。基本的に、データベースからドキュメントにアクセスし、保存したハッシュ化されたパスワードと、ユーザーがログイン時に送信したパスワードを比較しようとしています。ただし、パスワードを比較しようとすると、スキーマのメソッド オブジェクトにアタッチしたメソッドがどこにも見つかりません。そのような方法がないことを教えてくれるエラーさえスローしません。これは、スキーマでメソッドを設定しているところです。
私が比較メソッドとして使用している関数は、ユーティリティ ファイルに保持されている、verifyPassword という名前のユーティリティ関数です。その関数のコードは次のとおりです。
次のようにパスワードを確認しようとします。
それが違いを生むなら、ブルーバードの約束でマングースを約束しました。私は多くのことを試しましたが、スキーマを添付したと思っていたこのメソッドを呼び出そうとしても、なぜ何も起こらないのかについての答えが見つかりません。どんな助けでも大歓迎です。
javascript - Mongoose サブスキーマが _id を生成しない
私は2つのSchemaオブジェクトを持っています:
contact.js:
client.js:
残念ながら、Clientオブジェクトを保存すると、保存された _id に割り当てられませんContact。
しかし、このスキーマを使用すると:
client.js:
連絡先は、自動生成された _id で保存されます。
クライアントを保存する方法は非常に簡単です。
req.body の内容は次のとおりです。
私は何が欠けていますか?
mongodb - Mongoose からの ValidationError エラーの抑制/キャッチ
オブジェクトがモデルのスキーマに適切に準拠しているかどうかを検証する静的メソッドのセットアップがあり、検証自体は問題なく機能してValidationErrorいますが、コンソールに表示されるエラーを Mongoose で非表示にすることはできません。
検証の静的メソッドは次のとおりです。
次に、それを実行すると:
そして、私が言ったように、データを検証するためにそれを得ることができますが、常にこのエラーが表示されます:
(注: 何らかの形で then/catch と関係がある場合に備えて、JS の約束に Bluebird を使用しています)
スクリプトの実行はコードで続行されるため、実際にスクリプトなどを強制終了することはなく、コンソールにエラーを記録するだけです。しかし、この関数は検証を目的としているため、実際には「エラー」ではありません。コンソールからこれを非表示にする方法はありますか? (すべての Mongoose エラーではなく、この機能のためだけに)
ありがとう