sql >> Database teknologi >  >> NoSQL >> MongoDB

Inkluder felter i mongodb-aggregat

Det inkluderer ikke feltet, fordi du ikke har bedt om at få feltet tilbage. Det, du mangler her, er at bruge $first eller en lignende "akkumulator" for at returnere elementet under $group .

Hvis du ikke vil have den tomme e-mailadresse, skal du ekskludere den i $match pipeline fase, da det er den mest effektive ting at gøre.

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

En "pipeline" returnerer kun "output" fra stadier som $group eller $project at du faktisk beder det om. Ligesom "Unix-røret" | operatør, de eneste ting, der er tilgængelige for "næste trin", er det, du udskriver.

Dette skulle blot fremgå af:

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

Eller endda:

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

Hvilket naturligvis kun returnerer _id værdi, da det er alt, du bad om.

Du har kun adgang i et hvilket som helst pipeline-stadium til de data, som blev "outputtet af den forrige fase". Inden for en $group det betyder kun _id for grupperingsnøglen, og hvad der end er angivet "eksplicit" ved hjælp af en gyldig "akkumulator" for andre ejendomme, du ønsker at returnere. Enhver akkumulator (som er gyldig for en "streng" her ) vil fungere, men alt uden for _id skal brug en "akkumulator" .

Jeg foreslår, at du tager dig tid til at se på alle aggregeringsoperatørerne og hvad de rent faktisk gør. Der er eksempler på brug med hver operatør




  1. Stigende hukommelsesgrænse for mongodb samlede job

  2. [Infographic] Sammenligning af Cassandra vs. MongoDB

  3. Brug cases til updateOne over findOneAndUpdate i MongoDB

  4. MongoDB opdaterer flere underdokumenter med eller forespørg