26

ドキュメントによると、「$」は演算子用に予約されています。ただし、グループ演算子を見ると、値の前にドルを付ける必要があります。これらの値は演算子ではありません。では、この文脈ではどういう意味ですか?以下の例:

db.article.aggregate(
    { $group : {
        _id : "$author",
        docsPerAuthor : { $sum : 1 },
        viewsPerAuthor : { $sum : "$pageViews" }
    }}
);

pageViews の先頭にドル記号が必要なのはなぜですか? ローカルで試してみましたが、ドル記号がないと機能しません。

4

3 に答える 3

13

元のドキュメントまたは中間ドキュメント$field-nameからフィールドを参照する場合は、フォーマットを使用します。ここでは、作成者別にグループ化されたすべてのページ ビューを合計しています。

于 2013-04-28T17:56:29.387 に答える
13

$<field>の略です$$CURRENT.<field>

「$」は「$$CURRENT」と同等です。ここで、CURRENT はシステム変数であり、特定の段階で特に明記されていない限り、ほとんどの段階で現在のオブジェクトのルートにデフォルト設定されます。CURRENTはリバウンドできます。

また、「特に記載がない限り、すべての段階CURRENTは と同じで始まりROOTます。」

ついに:

" ROOT: 集約パイプライン ステージで現在処理されているルート ドキュメント、つまり最上位ドキュメントを参照します。" 参考:システム変数

つまりはグループ化されるドキュメントでありROOT、のプロパティにアクセスします。CURRENT$<field>CURRENT

:

CURRENT変更可能です。ただし、$<field>は と同等であるため$$CURRENT.<field>、再バインドするとアクセス CURRENTの意味が変わります。」参照: システム変数$

于 2018-05-07T13:38:28.127 に答える