問題タブ [subdocument]
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 - 親ドキュメントが存在しない可能性がある場合に MongoDB サブドキュメントを更新する
これは、 books.reviewsサブコレクションを含むbookコレクションで構成される私のデータです。
Node.js (Mongoose を使用) では、次の条件で、ユーザーがフォームからレビューを送信し、レビューと本の isbn をサーバーに送信できるようにする必要があります。
- 特定の isbn を持つ本がまだ存在しない場合は、それを追加してから、レビューを追加します (明らかに、まだ存在していません)。
- 本が実在するなら…
- このユーザーのこの書籍のレビューが存在しない場合は、レビューを追加します。
- このユーザーのこの書籍のレビューが存在する場合は、更新します。
これは 4 つの個別のクエリで実行できますが、最適ではないことはわかっています。使用できるクエリの最小数はいくつですか (もちろん、それらのクエリは何ですか)?
model - MEAN.js - 保存する前にサブドキュメントをマングース モデルにどのように挿入しますか?
危険!私はMEANスタックが初めてです。間違った用語を使用している可能性があります。また、質問を明確にするために、例から多くのコードを削除してリファクタリングしました。
複数のプロパティを持つスキーマがあり、そのうちの 1 つは混合型です。その混合型は、別のスキーマによって定義されたサブドキュメントの配列です。この別のスキーマには、さらに別のスキーマによって定義された、さらに別のサブドキュメントの配列を含む、混合型のさらに別のプロパティがあります。
クライアント側コントローラーで、次のように MainStandard のインスタンスを作成します。
ここで、履歴オブジェクトを作成して挿入したいと思います...
これを行うと、サーバー側のリクエストは次のようになります。
オブジェクト、あなたは言いますか?まあ、それはしません。そこで、検索を行って、「自分自身、historyEntry を mainStandard にプッシュしてから、値を mainStandard.history.values にプッシュしてみませんか?」
しかし、それもうまくいかないようです。ブラウザのコンソールに mainStandard.history.values が存在しないというエラーが表示されます。がっかりして、私はそれを印刷します。中括弧で引用された栄光の中で、私はそれをすぐそこに見ます!うーん...しかし、それはJavaScriptの名前付き配列ではないでしょうか? Object が上に表示される理由を説明します。
モデルを保存する前に、どのようにデータを入力できますか (これは間違った用語かもしれません)。
mongodb - 別のサブドキュメント内のサブドキュメントと一致 同じドキュメント
私のコレクションには次のドキュメントがあります。
私が望むのは、「usuarios.id」を指定し、「usuarios.id」が存在する各ドキュメントごとにすべての「roles.id」、「roles.nombre」を取得することです。
私はこれを試しました:
-- 最初に、探している「usuarios.id」で var を宣言します
それから私はこれを実行します:
しかし、結果は次のとおりです。
これは各rol.idの製品です。私が期待するのは次のようなものです( roles.id = usuarios.roles.id のもののみを取得します:
何か案は??
これは私の現在のスクリプトです:
アップデート:
@yogesh ソリューションを使用した後、スクリプトを少し改善しました。
$group を追加すると、結果の構造が改善されたと思います:
ありがとう@yogesh
node.js - Mongoose サブドキュメント pre remove ミドルウェアが呼び出されない
サブドキュメントが削除されないようにするため、各サブドキュメントスキーマの pre('remove') ミドルウェアにエラーを追加しました。
.remove() 関数を呼び出すと、効果的にミドルウェアが呼び出されます。ただし、remove() を呼び出さずに削除すると、ミドルウェアは削除されたかどうかを確認しません。
問題になるのは、リモート ソースからオブジェクトを受け取るときです。マングース ミドルウェアを介してすべての整合性チェックを実行し、すべてを同じ場所に保持したいと考えています。リモート ソースは、間違っているかどうかにかかわらず、サブ ドキュメントの 1 つを削除している可能性があります。そのため、Mongoose がドキュメント全体をチェックしているとき、サブ ドキュメントは .remove() 関数をトリガーせずに既に削除されています。
これが私の問題の最小限の実例です:
私の質問は次のとおりです。以前のすべての要素をチェックし、新しい要素と比較して削除されている要素を確認することなく、ミドルウェアを削除するサブドキュメントを呼び出すクリーンな方法はありますか?
arrays - MongoDb subdocument array populate (Mongoose ORM 経由) : populate が呼び出されたときに配列の順序を維持しますか
Mongoose に次のような 2 つのスキーマがあるとします。
次の行に沿ってクエリが作成された場合:
配列内の要素の順序は維持されますか? ここでの目的は、ユーザーが自分の映画のプレイリストの順序を維持できるようにすることです。「populate」メソッドが起動したときに、Movie オブジェクト Id の配列順序が維持されていない場合、これは私の目的を果たしません。そこで、この分野に詳しい人にお願いしようと思いました。
これが機能する場合、ユーザーがプレイリスト内の映画の順序を変更できるようにする別のタスクがあります。これは、映画オブジェクト ID インデックスを配列で交換できるようにすることで簡単に行うことができます。
事前にご協力いただきありがとうございます。
mongodb - 異なるディープ内でネストされた MongoDB サブドキュメントを検索する方法
文字列、別のサブドキュメント、ネストされた別のサブドキュメントなど、さまざまなタイプが含まれる場合がある MongoDB のサブドキュメントがあります。タイプに関係なく、このサブドキュメントのコンテンツ内を検索するクエリを作成しようとしています。
次のドキュメントが与えられます。
すべてのドキュメントとサブドキュメント内のすべての文字列を検索するクエリを使用したいと考えています。すでに次のクエリを試しましたが、サブドキュメントの最もネストされたレベルのみを返します - content.subdocument.family
:
ネストされたすべての文字列を一度に反復処理する 1 つのクエリを作成することは可能ですか?