フィールドの返却を要求しなかったため、フィールドは含まれていません。ここで欠落しているのは、 $ first
>
または同様の $ 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
以外のすべてのアキュムレータで問題ありません。 必須 "アキュムレータ"
を使用します 。
時間をかけてすべての