sql >> Databasteknik >  >> NoSQL >> MongoDB

Inkludera fält i mongodb-aggregat

Det inkluderar inte fältet eftersom du inte har bett om att fältet ska returneras. Det du saknar här är att använda $first eller en liknande "ackumulator" för att returnera elementet under $group .

Om du inte vill ha den tomma e-postadressen, uteslut den i $match pipeline, eftersom det är det mest effektiva att göra.

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

En "pipeline" returnerar bara "output" från steg som $group eller $project som du faktiskt ber om det. Precis som "Unix-röret" | operatör, de enda sakerna som är tillgängliga för "nästa steg" är vad du matar ut.

Detta bör helt enkelt framgå av:

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

Eller till och med:

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

Vilket naturligtvis bara returnerar _id värde eftersom det är allt du bad om.

Du har bara tillgång till de data som "matades ut av föregående steg" i alla pipeline-steg. Inom en $group det betyder bara _id för grupperingsnyckeln och vad som än har angetts "explicit" med en giltig "ackumulator" för alla andra fastigheter du vill returnera. Alla ackumulatorer (som är giltiga för en "sträng" här ) fungerar, men allt utanför _id måste använd en "ackumulator" .

Jag föreslår att du tar dig tid att titta på alla aggregationsoperatorer och vad de faktiskt gör. Det finns exempel på användning med varje operatör




  1. Hur man korrekt itererar genom en stor json-fil

  2. MongoDB Projektering av ett underdokument

  3. Frågar mongodb från golang med hjälp av _id lagrat i en array

  4. MongoDB:vad är skillnaderna mellan dokument, poster och attribut?