sql >> Database >  >> NoSQL >> MongoDB

Hoe een reeks strings terug te geven met mongodb-aggregatie

De .aggregate() methode retourneert altijd Objects wat je ook doet en dat kan niet veranderen.

Voor jouw doel ben je waarschijnlijk beter af met .distinct() in plaats daarvan, die alleen een array van de verschillende waarden retourneert:

db.users.distinct("emails.address");

Wat is precies uw gewenste output:

["[email protected]","[email protected]","[email protected]"]

Als je echt .aggregate() wilt gebruiken dan moet de transformatie naar alleen de waarden "buiten" de uitdrukking in de nabewerking plaatsvinden. En je zou ook $unwind moeten gebruiken bij het omgaan met arrays zoals deze.

U kunt dit doen met JavaScript .map() bijvoorbeeld:

db.users.aggregate([
    { "$unwind": "$emails" },
    { "$group": { "_id": "$emails.address" } }
]).map(function(el) { return el._id })

Wat dezelfde output geeft, maar de .map() doet de transformatie aan de clientzijde in plaats van op de server.



  1. Kan mongo-opdracht niet gebruiken, toont opdracht niet gevonden op mac

  2. Ubuntu 16.04 systemd redis-problemen met ulimit

  3. MongoDB:aggregatieraamwerk:$match tussen velden

  4. Azure DataBricks Stream foreach mislukt met NotSerializableException