sql >> データベース >  >> NoSQL >> MongoDB

mongodbアグリゲートにフィールドを含める

    フィールドの返却を要求しなかったため、フィールドは含まれていません。ここで欠落しているのは、 $ first> または同様の "accumulator" $ group>

    また、空のメールアドレスが必要ない場合は、内で除外してください。 $ match パイプラインステージ。これが最も効率的な方法です。

    db.collection.aggregate([
        { $match: { branch: "CO", "customerEmail": { "$ne": "" } } },
        { $group:
            {
                _id: { customer:"$customerID"},
                email: { "$first": "$customerEmail" }
            }
        }
    ]);
    

    「パイプライン」は、$などのステージからの「出力」のみを返します。グループ または $ project あなたが実際にそれを求めること。 「Unixパイプ」のように| 演算子、「次の段階」で利用できるのは出力するものだけです。

    これは、次のことから簡単にわかるはずです:

    db.collection.aggregate([
        { $match: { branch: "CO" } },   
        { $group:
            {
                _id: { customer:"$customerID"}
            }
        }
    ]);
    

    または:

    db.collection.aggregate([
        { $match: { branch: "CO" } },   
        { $project:
            {
                _id: { customer:"$customerID"}
            }
        }
    ]);
    

    もちろん、これは _idのみを返します それがあなたが求めたすべてなので、価値があります。

    どのパイプラインステージでも、「前のステージで出力された」データにのみアクセスできます。 $ group つまり、 _idのみを意味します グループ化キー、および「明示的に」指定されたもの 有効な"アキュムレータ" を使用する 返却したいその他のプロパティの場合。すべてのアキュムレータ(ここでは「文字列」に有効)で問題ありませんが、 _id以外のすべてのアキュムレータで問題ありません。 必須 "アキュムレータ" を使用します 。

    時間をかけてすべての集計演算子 を確認することをお勧めします。 そして彼らが実際に何をしているのか。各オペレーターの使用例があります




    1. 日付クエリは_idで機能しますが、日付値では機能しません-MongoDB

    2. Mongoid/Mongodbおよび埋め込みドキュメントのクエリ

    3. MongoDBは、2レベルの深さの配列から要素をプルします

    4. マングースによる多対多のマッピング