コアポイント
-
NOSQLデータベースであるMongoDBは、バージョン3.2に新しい
- オペレーターを導入しました。ただし、この演算子は、単純なルックアップクエリよりも複雑で遅い総操作での使用に限定されています。
$lookup
mongodbの - オペレーターには、4つのパラメーターが必要です。
$lookup
(ドキュメントの検索フィールドを入力)、localField
(接続するコレクション)、from
>)andforeignField
(出力フィールドの名前)。このオペレーターは、集約クエリで使用して、投稿を一致させ、順番に並べ替え、アイテムの数を制限し、ユーザーデータを接続し、ユーザー配列をフラット化し、必要なフィールドのみを返すことができます。from
as
MongoDBの オペレーターは有用であり、NOSQLデータベースで少量のリレーショナルデータを管理するのに役立ちますが、SQLのより強力な結合条項に代わるものではありません。ユーザードキュメントがMongoDBで削除されている場合、Orphan Postドキュメントが保持され、制約がないことを示します。したがって、 - 演算子が頻繁に使用される場合、間違ったデータストレージが使用され、リレーショナル(SQL)データベースがより適していることを示している可能性があります。
$lookup
$lookup
彼のピアレビューヘルプをありがとう、ジュリアン・モッツに感謝します。
言い換えれば、本のテーブルには、パブリッシャーテーブルのIDフィールドを参照するPublisher_IDフィールドがあります。
1人の出版社が数千冊の本を提供できるため、これは実用的です。将来出版社の詳細を更新する必要がある場合は、個々のレコードを変更できます。各本の出版社の情報を繰り返す必要がないため、データの冗長性が最小限に抑えられます。この技術は標準化と呼ばれます。SELECT book.title, publisher.name FROM book LEFT JOIN book.publisher_id ON publisher.id;
SQLデータベースは、関係の維持を確保するために、さまざまな標準化と制約を提供します。
nosql ==結合なし?
これは必ずしもそうではありません…ドキュメント指向のデータベース(MongoDBなど)は、非正規化データを保存するように設計されています。理想的には、セット間に関係がないはずです。同じデータが2つ以上のドキュメントにある必要がある場合は、繰り返す必要があります。 これは、
がリレーショナルデータを必要としない状況がほとんどないため、イライラする可能性があります。幸いなことに、MongoDB 3.2は、2つ以上のセットで左翼に結合した操作を実行できる新しいオペレーターを導入しました。しかし、問題があります...
mongodb集合
$lookup
総操作でのみ使用することができます。それを、結果をクエリ、フィルター、およびグループの結果を照会した一連のオペレーターのパイプラインと考えてください。 1つの演算子の出力は、次の演算子への入力として使用されます。
集約は、単純なルックアップクエリよりも理解するのが難しく、通常は遅くなります。ただし、それらは強力であり、複雑な検索操作にとって貴重なオプションです。
例を使用して集約を説明するのが最善です。ユーザーのコレクションを備えたソーシャルメディアプラットフォームを作成しているとします。各ユーザーの詳細を別のドキュメントに保存します。たとえば、
SELECT book.title, publisher.name FROM book LEFT JOIN book.publisher_id ON publisher.id;
必要な数のフィールドを追加できますが、すべてのMongoDBドキュメントには、一意の値を持つフィールドが必要です。 _id
ソーシャルネットワークには、ユーザーからの多数の洞察に満ちた更新を保存する投稿のコレクションが必要です。ドキュメントには、
user_id
{ "_id": ObjectID("45b83bda421238c76f5c1969"), "name": "User One", "email": "userone@email.com", "country": "UK", "dob": ISODate("1999-09-13T00:00:00.000Z") }
mongodb集約クエリは、各操作を順番に定義するパイプライン演算子の配列に渡されます。まず、
フィルターを使用して、ポストコレクションから正しい評価ですべてのドキュメントを抽出する必要があります。
$match
{ "_id": ObjectID("17c9812acff9ac0bba018cc1"), "user_id": ObjectID("45b83bda421238c76f5c1969"), "date": ISODate("2016-09-05T03:05:00.123Z"), "text": "My life story so far", "rating": "important" }
20の投稿しか必要ないので、$sort
ステージを適用して、mongodbが必要なデータのみを処理する必要があるようにすることができます。
{ "$match": { "rating": "important" } }新しい
オペレーターを使用して、ユーザーコレクションのデータを接続できるようになりました。 4つのパラメーターを備えたオブジェクトが必要です:$limit
{ "$sort": { "date": -1 } }
:ドキュメントの検索フィールドを入力します$lookup
- :接続するコレクション
-
localField
: - collection
from
で見つかったフィールド - :出力フィールドの名前。
foreignField
from
したがって、 オペレーターは次のとおりです
-
as
これにより、出力に新しいフィールドが作成されます。各値がユーザードキュメントと一致する配列が含まれています。
と
。したがって、私たちの{ "$limit": 20 }配列には常に1つのアイテムのみが含まれます。
オペレーターを使用して、それを分解に分解できます:userinfo
{ "$lookup": { "localField": "user_id", "from": "user", "foreignField": "_id", "as": "userinfo" } }出力はより実用的な形式に変換され、他のオペレーターが適用できます。
post.user_id
最後に、パイプラインのuser._id
ステージを使用して、テキスト、投稿の時間、ユーザーの名前、国:userinfo
を返すことができます。
SELECT book.title, publisher.name FROM book LEFT JOIN book.publisher_id ON publisher.id;すべてをまとめます
最終的な集計クエリは、投稿、順番にソート、最新の20項目に制限し、ユーザーデータを接続し、ユーザー配列を平らにし、必要なフィールドのみを返します。完全なコマンド:
{ "_id": ObjectID("45b83bda421238c76f5c1969"), "name": "User One", "email": "userone@email.com", "country": "UK", "dob": ISODate("1999-09-13T00:00:00.000Z") }結果は、最大20のドキュメントのコレクションです。たとえば、
{ "_id": ObjectID("17c9812acff9ac0bba018cc1"), "user_id": ObjectID("45b83bda421238c76f5c1969"), "date": ISODate("2016-09-05T03:05:00.123Z"), "text": "My life story so far", "rating": "important" }素晴らしい!ついにnosqlに切り替えることができます!
mongodb
は便利で強力ですが、この基本的な例でさえ、複雑な集約クエリが必要です。 SQLのより強力な結合句を置き換えることはできません。 MongoDBは、ユーザードキュメントが削除されている場合、孤児のポストドキュメントを保持します。 $lookup
オペレーターはめったに必要ありません。頻繁に必要な場合は、間違ったデータストアを使用している可能性があります...$lookup
リレーショナルデータがある場合は、リレーショナル(SQL)データベースを使用してください!つまり、
はMongodb 3.2に人気のある追加です。 NOSQLデータベースで少量のリレーショナルデータを使用する場合、よりイライラする問題のいくつかを克服します。 $lookup
Mongodb NoSQLデータベース(FAQ)
SQL接続とMongoDB接続の違いは何ですか?
SQLデータベースでは、接続操作は、それらの間に関連する列に基づいて2つ以上のテーブルから行を組み合わせます。ただし、NOSQLデータベースとしてのMongoDBは、従来のSQL接続をサポートしていません。代わりに、MongoDBは、集約のステージと
ステージという同様の操作を実行する2つの方法を提供します。これらの方法では、複数のコレクションからのデータを単一の結果セットに結合することができます。
Mongodbの$lookup
ステージはどのように機能しますか? $graphLookup
MongoDBの
ステージを使用すると、別のコレクション(「接続」コレクション)からドキュメントを接続し、接続されたドキュメントを入力ドキュメントに追加できます。 $lookup
MongoDB接続を使用して再帰検索を実行できますか?
$lookup
はい、MongoDBは再帰検索のために$lookup
フェーズを提供します。
MongoDB接続を使用するときにパフォーマンスを最適化する方法は?
$graphLookup
MONGODB接続を使用する場合、次の戦略を検討します🎜>ステージ$graphLookup
および
mongodbで複数のコレクションを接続できますか?
はい、集約パイプラインに複数の$lookup
ステージをリンクすることにより、複数のMongoDBコレクションを接続できます。各$lookup
ステージは、別のコレクションから入力ドキュメントに接続されたドキュメントを追加します。
mongoDB接続を使用するときにnullまたは欠損値を処理する方法は?
MongoDB接続を使用する場合、入力コレクションのドキュメントが「From」コレクションのドキュメントと一致しない場合、$lookup
フェーズは空の配列を「As」フィールドに追加します。 $lookup
フェーズの後に$match
フェーズを追加して、「フィールド」としてドキュメントをフィルタリングすることにより、これらのnullまたは欠損値を処理できます。
シャードコレクションとMongodb接続を使用できますか?
Mongodb 3.6から始まるおよび$lookup
ステージは、シェルドセットを「From」セットに受け入れることができます。ただし、追加のネットワークオーバーヘッドにより、パフォーマンスは非剃毛コレクションほど良くない場合があります。 $graphLookup
集約パイプラインの
フェーズの後に$lookup
フェーズを追加することにより、MongoDBで接続されたドキュメントをソートできます。 $sort
ステージは、指定されたフィールドのドキュメントを昇順または降順でソートします。 $sort
メソッドを使用してmongodb接続を使用できますか? find()
いいえ、mongoDB接続はメソッドでは使用できません。 find()
および$lookup
段階は、$graphLookup
メソッドよりも高度なデータ処理機能を提供する集約フレームワークの一部です。 find()
MongoDB接続の障害をデバッグまたはトラブルシューティングするには、
メソッドを使用して、集約パイプラインの実行計画を分析できます。 explain()
メソッドは、処理されたドキュメントの数、費やした時間、インデックスの使用を含む段階に関する詳細な情報を提供します。 explain()
以上がMongoDB NoSQLデータベースに参加するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このチュートリアルは、AWSサービスを使用してサーバーレスイメージ処理パイプラインを構築することをガイドします。 APIゲートウェイ、Lambda関数、S3バケット、およびDynamoDBと対話するECS Fargateクラスターに展開されたnext.jsフロントエンドを作成します。 th

このパイロットプログラム、CNCF(クラウドネイティブコンピューティングファンデーション)、アンペアコンピューティング、Equinix Metal、およびActuatedのコラボレーションであるCNCF GithubプロジェクトのARM64 CI/CDが合理化されます。 このイニシアチブは、セキュリティの懸念とパフォーマンスリムに対処します

このGOベースのネットワーク脆弱性スキャナーは、潜在的なセキュリティの弱点を効率的に識別します。 Goの同時機能機能を速度で活用し、サービスの検出と脆弱性のマッチングが含まれます。その能力と倫理を探りましょう


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
