Nezahrnuje pole, protože jste nepožádali o vrácení pole. To, co vám zde chybí, je použití $first
nebo podobný "accumulator"
za účelem vrácení prvku během $group
.
Pokud také nechcete prázdnou e-mailovou adresu, vylučte ji v rámci $match
fáze potrubí, protože to je nejúčinnější věc.
db.collection.aggregate([
{ $match: { branch: "CO", "customerEmail": { "$ne": "" } } },
{ $group:
{
_id: { customer:"$customerID"},
email: { "$first": "$customerEmail" }
}
}
]);
"Potrubí" vrací "výstup" pouze z fází jako $group
nebo $project
že o to vlastně žádáš. Stejně jako "Unixová roura" |
operátora, jediné věci dostupné pro "další fázi" jsou to, co vytisknete.
To by mělo být zřejmé jednoduše z:
db.collection.aggregate([
{ $match: { branch: "CO" } },
{ $group:
{
_id: { customer:"$customerID"}
}
}
]);
Nebo dokonce:
db.collection.aggregate([
{ $match: { branch: "CO" } },
{ $project:
{
_id: { customer:"$customerID"}
}
}
]);
Což samozřejmě vrací pouze _id
hodnotu, protože to je vše, co jste požadovali.
V jakékoli fázi potrubí máte přístup pouze k datům, která byla „výstupem předchozí fáze“. V rámci $group
to znamená pouze _id
pro klíč seskupení a vše, co bylo uvedeno "explicitně" pomocí platného "accumulator"
pro jakékoli další nemovitosti, které chcete vrátit. Bude stačit jakýkoli akumulátor (který zde platí pro "řetězec"), ale cokoliv mimo _id
musí použijte "akumulátor"
.
Navrhuji, abyste si udělali čas a podívali se na všechny operátory agregace a co vlastně dělají. U každého operátora existuje příklad použití