Necesito para volver array de string con mongodb agregación. Hice lo siguiente:

db.users.aggregate([{$group: {_id:"$emails.address"}}])

Volver:

{ "_id" : [ "[email protected]" ] }
{ "_id" : [ "[email protected]" ] }
{ "_id" : [ "[email protected]" ] }

Hay una manera de regresar a la matriz de la cadena como esta:

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

muchas gracias a cualquiera que se tome su tiempo para ayudarme..

EDITAR

Adición de datos:

{
    "_id" : "ukn9MLo3hRYEpCCty",
    "createdAt" : ISODate("2015-10-24T03:52:11.960Z"),
    "emails" : [
        {
            "address" : "[email protected]",
            "verified" : false
        }
    ]
}
{
    "_id" : "5SXRXraariyhRQACe",
    "createdAt" : ISODate("2015-10-24T03:52:12.093Z"),
    "emails" : [
        {
            "address" : "[email protected]",
            "verified" : false
        }
    ]
}
{
    "_id" : "WMHWxeymY4ATWLXjz",
    "createdAt" : ISODate("2015-10-24T03:52:12.237Z"),
    "emails" : [
        {
            "address" : "[email protected]",
            "verified" : false
        }
    ]
}
puedes publicar tus datos
hola @ScottStensland he añadido los datos,,,gracias..
hola r u significa volver en nombre de la matriz de los valores de par o simplemente devolver sólo en la serie?
hola @HaRLoFei acaba de regresar sólo en la serie. alguna idea??

OriginalEl autor | 2015-10-29

2 Comentarios

  1. 14

    La .aggregate() método siempre devuelve Objects no importa lo que hagas y que no puede cambiar.

    Para su propósito, usted es probablemente mejor usar .distintos() lugar, lo que no acabo de volver de una matriz de los valores distintos:

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

    Que es exactamente el deseado de salida:

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

    Si usted realmente desea utilizar .aggregate(), a continuación, el tranformation sólo los valores que debe suceder «fuera» de la expresión en el procesamiento posterior. Y también debe ser el uso de $unwind cuando se trata con matrices como este.

    Usted puede hacer esto con JavaScript .map() por ejemplo:

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

    Que da el mismo resultado, pero la .map() hace la transformación lado del cliente en lugar de en el servidor.

    eso es lo que estoy buscando,gracias Señor…
    es allí una manera de hacer que en el lado del servidor, del lado del cliente como la asignación de ralentizar el rendimiento
    Yo he contestado haciendo en mongodb aquí: stackoverflow.com/a/46599310/4308032 se le dará una matriz, pero será todavía incrustado en el objeto.

    OriginalEl autor Blakes Seven

  2. 2

    Lo Blakes Siete ha contestado es correcto.

    El .aggregate() método siempre devuelve los Objetos no importa lo que hagas
    y eso no puede cambiar.

    Sin embargo, eso no significa que usted no puede ponerlos en una matriz y devolver la matriz en un objeto.

    Creo que en la cartografía de la matriz en la base de datos sería más mejor, como su servidor de nodo todavía puede estar disponible para otras solicitudes.

    db.users.aggregate([
         { "$unwind": "$emails" },
         { "$group": { "_id": null, emails:{$push:"$emails.address"} } },
         { "$project":{emails:true,_id:false}}
     ])

    Esto devolverá:

    { "emails" : [ "[email protected]", "[email protected]", "[email protected]" ] }

    OriginalEl autor Dushyant Bangal

Dejar respuesta

Please enter your comment!
Please enter your name here