Itu tidak termasuk bidang karena Anda tidak meminta bidang untuk dikembalikan. Hal yang Anda lewatkan di sini adalah menggunakan $first
atau "accumulator"
yang serupa untuk mengembalikan elemen selama $group
.
Juga jika Anda tidak ingin alamat email kosong, kecualikan dalam $match
tahap pipeline, karena itu adalah hal yang paling efisien untuk dilakukan.
db.collection.aggregate([
{ $match: { branch: "CO", "customerEmail": { "$ne": "" } } },
{ $group:
{
_id: { customer:"$customerID"},
email: { "$first": "$customerEmail" }
}
}
]);
Sebuah "pipa" hanya mengembalikan "output" dari tahapan seperti $group
atau $project
bahwa Anda benar-benar memintanya. Sama seperti "pipa Unix" |
operator, satu-satunya hal yang tersedia untuk "tahap selanjutnya" adalah apa yang Anda hasilkan.
Ini harus jelas hanya dari:
db.collection.aggregate([
{ $match: { branch: "CO" } },
{ $group:
{
_id: { customer:"$customerID"}
}
}
]);
Atau bahkan:
db.collection.aggregate([
{ $match: { branch: "CO" } },
{ $project:
{
_id: { customer:"$customerID"}
}
}
]);
Yang mengembalikan tentu saja hanya _id
nilai karena hanya itu yang Anda minta.
Anda hanya memiliki akses di setiap tahap pipa ke data yang "dikeluarkan oleh tahap sebelumnya". Dalam $group
itu berarti hanya _id
untuk kunci pengelompokan, dan apa pun yang ditentukan "secara eksplisit" menggunakan "accumulator"
yang valid untuk properti lain yang ingin Anda kembalikan. Akumulator apa pun ( yang valid untuk "string" di sini) dapat digunakan, tetapi apa pun di luar _id
harus gunakan "akumulator"
.
Saya sarankan meluangkan waktu untuk melihat semua operator agregasi dan apa yang sebenarnya mereka lakukan. Ada contoh penggunaan dengan masing-masing operator