sql >> Database >  >> NoSQL >> MongoDB

Velden opnemen in mongodb-aggregaat

Het bevat het veld niet omdat u niet hebt gevraagd om het veld terug te sturen. Wat je hier mist is het gebruik van $first of een vergelijkbare "accumulator" om het element te retourneren tijdens de $group .

Als u het lege e-mailadres niet wilt, sluit het dan uit binnen de $match pijplijnfase, aangezien dat het meest efficiënt is om te doen.

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

Een "pijplijn" retourneert alleen "uitvoer" van fasen zoals $group of $project dat je er eigenlijk om vraagt. Net als de "Unix-pipe" | operator, de enige dingen die beschikbaar zijn voor de "volgende fase" zijn wat u uitvoert.

Dit zou eenvoudigweg moeten blijken uit:

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

Of zelfs:

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

Wat natuurlijk alleen de _id . oplevert waarde, want dat is alles waar je om vroeg.

U hebt in elke pijplijnfase alleen toegang tot de gegevens die zijn "uitgevoerd door de vorige fase". Binnen een $group dat betekent alleen de _id voor de groeperingssleutel en alles wat "expliciet" is opgegeven met een geldige "accumulator" voor alle andere eigendommen die u wilt retourneren. Elke accumulator (die hier geldig is voor een "string") is voldoende, maar alles buiten de _id moeten gebruik een "accumulator" .

Ik raad aan de tijd te nemen om alle aggregatie-operators te bekijken en wat ze eigenlijk doen. Er is een voorbeeldgebruik bij elke operator




  1. Forceer mongodb om strikte JSON uit te voeren

  2. Hoe ActionController::Leef samen met Resque + Redis (voor Chat-applicatie) te gebruiken

  3. Hoe voer je een vondst uit (id:{ $in:[lijst]}) met de vertx-mongo-client

  4. Is er een MongoDB maximale bson-omvang?