MongoDB パイプライン オペレーター
Linux オペレーティング システムに詳しい友人は、Linux にはデータを便利に処理するために使用できるパイプラインがあることを知っているはずです。 MongoDB バージョン 2.2 では、新しいデータ集約フレームワークも導入されており、ドキュメントは複数のノードで構成されるパイプラインを通過できます。各ノードには、ドキュメントのグループ化、ドキュメントのフィルタリングなどの独自の機能があります。各ノードは一連のドキュメントを受け入れます。 、これらのドキュメントに対して何らかの型変換を実行し、変換されたドキュメントを次のノードに渡します。最後のノードは結果をクライアントに返します。この記事では、まずいくつかの基本的なパイプライン演算子を見ていきます。
$match
$match を使用してドキュメントをフィルタリングできます。フィルタリングが完了したら、前に紹介したクエリ演算子を使用してドキュメントのサブセットに対してデータ集計操作を実行できます。たとえば、次のように、コレクション内で作成者が「Du Fu」であるすべてのドキュメントを取得します。
db.sang_collect.aggregate({$match:{author:"杜甫"}})
実際の使用では、$match をパイプラインの前に置くのが最善です。これにより、同時に、プロジェクションとグループ化の前に $match を実行するときにインデックスを使用することもできます。
$project
基本的な使い方
$project は、次のように目的のフィールドを抽出するために使用できます:
db.sang_collect.aggregate({$project:{title:1,_id:0}})
1 はこのフィールドが必要であることを意味し、0 はこのフィールドが不要であることを意味し、返されたフィールドの名前を変更することもできます
db.sang_collect.aggregate({$project:{"articleTitle":"$title"}})
ただし、元のフィールドにインデックスがある場合、名前を変更したフィールドにはインデックスが存在しないため、注意が必要な問題があります。名前を変更する前にインデックスを使用することをお勧めします。
数式
数式は、一連の値を加算、減算、乗算、除算して剰余を求めるために使用できます。たとえば、私のデータ構造は次のとおりです。
{ "_id" : ObjectId("59f841f5b998d8acc7d08863"), "orderAddressL" : "ShenZhen", "prodMoney" : 45.0, "freight" : 13.0, "discounts" : 3.0, "orderDate" : ISODate("2017-10-31T09:27:17.342Z"), "prods" : [ "可乐", "奶茶" ] }
注文の合計コストは次のとおりです。クエリは次のとおりです:
db.sang_collect.aggregate({$project:{totalMoney:{$add:["$prodMoney","$freight"]}}})
実際の支払い手数料は、次のように合計手数料から割引を差し引いたものです:
db.sang_collect.aggregate({$project:{totalPay:{$subtract:[{$add:["$prodMoney","$freight"]},"$discounts"]}}})
prodMoney と運賃と割引の積を計算するなど、3 つの無意味な操作を実行してみましょう。 :
db.sang_collect.aggregate({$project:{test1:{$multiply:["$prodMoney","$freight","$discounts"]}}})
別の例は、次のように $prodMoney と $freight の商を求めることです:
db.sang_collect.aggregate({$project:{test1:{$pide:["$prodMoney","$freight"]}}})
別の例は、次のように $freight を使用して $prodMoney を法算することです:
db.sang_collect.aggregate({$project:{test1:{$mod:["$prodMoney","$freight"]}}})
加算と乗算の両方で複数のパラメーターを受け取ることができます、残りはすべて 2 つのパラメーターを受け取ります。
日付式
日付式は、次のように日付型から年、月、日、週、時、分、秒などの情報を抽出できます:
db.sang_collect.aggregate({$project:{"年份":{$year:"$orderDate"},"月份":{$month:"$orderDate"},"一年中第几周":{$week:"$orderDate"},"日期":{$dayOfMonth:"$orderDate"},"星期":{$dayOfWeek:"$orderDate"},"一年中第几天":{$dayOfYear:"$orderDate"},"时":{$hour:"$orderDate"},"分":{$minute:"$orderDate"},"秒":{$second:"$orderDate"},"毫秒":{$millisecond:"$orderDate"},"自定义格式化时间":{$dateToString:{format:"%Y年%m月%d %H:%M:%S",date:"$orderDate"}}}})
実行結果は次のとおりです:
{ "_id" : ObjectId("59f841f5b998d8acc7d08861"), "年份" : 2017, "月份" : 10, "一年中第几周" : 44, "日期" : 31, "星期" : 3, "一年中第几天" : 304, "时" : 9, "分" : 27, "秒" : 17, "毫秒" : 342, "自定义格式化时间" : "2017年10月31 09:27:17" }
$dayOfWeekが返されますこれは週であり、1 は日曜日を意味し、7 は土曜日を意味し、$week は今週が今年の週であることを意味し、0 から数えます。 $dateToString は MongoDB3.0 以降の機能です。次の書式設定文字もあります:
文字 | 意味 | 値の範囲 |
---|---|---|
%Y | 年(4桁、ゼロ埋め) | 0000-9999 |
%m | 月 (2 桁、ゼロ埋め) | 01-12 |
%d | 日 (2 桁、ゼロ埋め) | 01-31 |
%H | 時 2 桁、ゼロ埋め) | 00-60 |
%L | ミリ秒 (3 桁、ゼロ埋め) | 000-999 |
%j | 通算日 (3 桁、ゼロ埋め) | 001 -366 |
%w | 曜日 (1-日曜日、7-土曜日) | 1-7 |
%U | 年の週 (2 桁、ゼロ埋め込み) | 00- 53 |
字符串表达式字符串表达式中有字符串的截取、拼接、转大写、转小写等操作,比如我截取orderAddressL前两个字符返回,如下: db.sang_collect.aggregate({$project:{addr:{$substr:["$orderAddressL",0,2]}}}) ログイン後にコピー 再比如我将orderAddressL和orderDate拼接后返回: db.sang_collect.aggregate({$project:{addr:{$concat:["$orderAddressL",{$dateToString:{format:"--%Y年%m月%d",date:"$orderDate"}}]}}}) ログイン後にコピー 结果如下: { "_id" : ObjectId("59f841f5b998d8acc7d08861"), "addr" : "NanJing--2017年10月31" } ログイン後にコピー 再比如我将orderAddressL全部转为小写返回: db.sang_collect.aggregate({$project:{addr:{$toLower:"$orderAddressL"}}}) ログイン後にコピー 再比如我将orderAddressL全部转为大写返回: db.sang_collect.aggregate({$project:{addr:{$toUpper:"$orderAddressL"}}}) ログイン後にコピー 逻辑表达式想要比较两个数字的大小,可以使用$cmp操作符,如下: db.sang_collect.aggregate({$project:{test:{$cmp:["$freight","$discounts"]}}}) ログイン後にコピー 如果第一个参数大于第二个参数返回正数,第一个参数小于第二个则返回负数,也可以利用$strcasecmp来比较字符串(中文无效): db.sang_collect.aggregate({$project:{test:{$strcasecmp:[{$dateToString:{format:"..%Y年%m月%d",date:"$orderDate"}},"$orderAddressL"]}}}) ログイン後にコピー 至于我们之前介绍的$eq/$ne/$gt/$gte/$lt/$lte等操作符在这里一样是适用的。另外还有$and、$or、$not等表达式可用,以$and为例,如下: db.sang_collect.aggregate({$project:{test:{$and:[{"$eq":["$freight","$prodMoney"]},{"$eq":["$freight","$discounts"]}]}}}) ログイン後にコピー $and中的每个参数都为true时返回true,$or则表示参数中有一个为true就返回true,$not则会对它的参数的值取反,如下: db.sang_collect.aggregate({$project:{test:{$not:{"$eq":["$freight","$prodMoney"]}}}}) ログイン後にコピー 另外还有两个流程控制语句,如下: db.sang_collect.aggregate({$project:{test:{$cond:[false,"trueExpr","falseExpr"]}}}) ログイン後にコピー $cond第一个参数如果为true,则返回trueExpr,否则返回falseExpr. db.sang_collect.aggregate({$project:{test:{$ifNull:[null,"replacementExpr"]}}}) ログイン後にコピー $ifNull第一个参数如果为null,则返回replacementExpr,否则就返回第一个参数。 以上内容就是MongoDB管道操作符部分介绍,希望能帮助到大家。 |
以上がMongoDB パイプライン オペレーターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









パイプを介したファイルの読み取りと書き込み: ファイルからデータを読み取り、パイプを介してデータを渡すためのパイプを作成します。 パイプからデータを受信して処理します。 処理されたデータをファイルに書き込みます。 ゴルーチンを使用してこれらの操作を同時に実行し、パフォーマンスを向上させます。

目次 Astar Dapp ステーキングの原則 ステーキング収益 潜在的なエアドロップ プロジェクトの解体: AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap ステーキング戦略と運用 「AstarDapp ステーキング」は今年初めに V3 バージョンにアップグレードされ、ステーキング収益に多くの調整が加えられましたルール。現在、最初のステーキング サイクルが終了し、2 番目のステーキング サイクルの「投票」サブサイクルが始まったばかりです。 「追加報酬」特典を獲得するには、この重要な段階を把握する必要があります (6 月 26 日まで続く予定で、残りは 5 日未満です)。 Astarステーキング収入を詳しく説明します。

この記事では、自動拡張を実現するためにDebianシステムでMongodbを構成する方法を紹介します。主な手順には、Mongodbレプリカセットとディスクスペース監視のセットアップが含まれます。 1。MongoDBのインストール最初に、MongoDBがDebianシステムにインストールされていることを確認してください。次のコマンドを使用してインストールします。sudoaptupdatesudoaptinstinstall-yymongodb-org2。mongodbレプリカセットMongodbレプリカセットの構成により、自動容量拡張を達成するための基礎となる高可用性とデータ冗長性が保証されます。 Mongodbサービスを開始:Sudosystemctlstartmongodsudosys

この記事では、Debianシステムで非常に利用可能なMongoDBデータベースを構築する方法について説明します。データのセキュリティとサービスが引き続き動作し続けるようにするための複数の方法を探ります。キー戦略:レプリカセット:レプリカセット:レプリカセットを使用して、データの冗長性と自動フェールオーバーを実現します。マスターノードが失敗すると、レプリカセットが自動的に新しいマスターノードを選択して、サービスの継続的な可用性を確保します。データのバックアップと回復:MongoDumpコマンドを定期的に使用してデータベースをバックアップし、データ損失のリスクに対処するために効果的な回復戦略を策定します。監視とアラーム:監視ツール(プロメテウス、グラファナなど)を展開して、MongoDBの実行ステータスをリアルタイムで監視し、

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

Go のパイプは、ゴルーチン間でデータを安全かつ効率的に転送してアプリケーションのパフォーマンスを向上させるために使用される通信メカニズムです。パイプライン操作には 2 つのタイプがあります。 バッファなし: データは同期的に送受信される必要があります。バッファリング: パイプにはストレージ スペースが割り当てられ、非同期の送受信が可能になります。例: フィボナッチ数列を計算する場合、メインのゴルーチンと計算ゴルーチンの間の通信にパイプラインが使用されます。これにより、同時計算が実現され、パフォーマンスが大幅に向上します。

DebianシステムでMongoDBデータベースを暗号化するには、次の手順に従う必要があります。ステップ1:MongoDBのインストール最初に、DebianシステムがMongoDBをインストールしていることを確認してください。そうでない場合は、インストールについては公式のMongoDBドキュメントを参照してください:https://docs.mongodb.com/manual/tutorial/install-mongodb-onedbian/-step 2:暗号化キーファイルを作成し、暗号化キーを含むファイルを作成し、正しい許可を設定します。

MongoDB効率的なバックアップ戦略の詳細な説明CENTOSシステムでは、この記事では、データセキュリティとビジネスの継続性を確保するために、CENTOSシステムにMongoDBバックアップを実装するためのさまざまな戦略を詳細に紹介します。 Dockerコンテナ環境でのマニュアルバックアップ、タイミング付きバックアップ、自動スクリプトバックアップ、バックアップメソッドをカバーし、バックアップファイル管理のベストプラクティスを提供します。マニュアルバックアップ:MongoDumpコマンドを使用して、マニュアルフルバックアップを実行します。たとえば、Mongodump-Hlocalhost:27017-U Username-P Password-Dデータベース名-O/バックアップディレクトリこのコマンドは、指定されたデータベースのデータとメタデータを指定されたバックアップディレクトリにエクスポートします。
