Aggregate Mongo

di il
4 risposte

Aggregate Mongo

Buongiorno ho un problema a creare questa view:

Ho un documento in questo modo:
{
"_id" : ObjectId("62ecf2a7376c53ea9805395c"),
"email" : "",
"referente" : [
{
"referente_nome" : "Nome 0",
"referente_cognome" : "Cognome 0",
"referente_telefono" : "3215731234",
"referente_email" : ""
},
{
"referente_nome" : "Nome 1",
"referente_cognome" : "Cognome 1",
"referente_telefono" : "3215731234",
"referente_email" : ""
},
{
"referente_nome" : "",
"referente_cognome" : "",
"referente_telefono" : "",
"referente_email" : ""
}
],
"insert_date" : ISODate("2022-08-05T12:36:23.333+0000")
}
{
"_id" : ObjectId("62ecf2a7376c53ea9805393c"),
"email" : "",
"referente" : [
{
"referente_nome" : "Nome 00",
"referente_cognome" : "Cognome 00",
"referente_telefono" : "3215731234",
"referente_email" : ""
},
{
"referente_nome" : "Nome 10",
"referente_cognome" : "Cognome 10",
"referente_telefono" : "3215731234",
"referente_email" : ""
},
{
"referente_nome" : "",
"referente_cognome" : "",
"referente_telefono" : "",
"referente_email" : ""
}
],
"insert_date" : ISODate("2022-08-05T12:36:23.333+0000")
}
ecc.
devo far apparire un documento alla volta con solo il primo referente e concatenare i campi referente_nome + referente_cognome.

Ho provato a fare un unwind sul referente.referente_nome ma da valore null
mi potete aiutare?
Questo e' l'aggregate che faccio:

pipeline = [
{
u"$unwind": {
u"path": u"$referente.referente_nome",
u"preserveNullAndEmptyArrays": True
}
},
{
u"referente_nome": {
u"$concat": [
u"$referente_nome",
u" ",
u"$referente_cognome"
]
},
}
}
]

cursor = collection.aggregate(
pipeline,
allowDiskUse = False
)

4 Risposte

  • Re: Aggregate Mongo

    Io proverei innanzitutto a formattare il codice usando l'apposito pulsante </> sopra il messaggio, altrimenti non si riesce a leggere nulla.
  • Re: Aggregate Mongo

    Provo a riformattarlo, questo e' il documento:
    
    {
    	"_id" : ObjectId("62ecf2a7376c53ea9805395c"),
    	"email" : "info@prova.it",
    	"referente" : 	[
    				{
    					"referente_nome" : "Nome 0",
    					"referente_cognome" : "Cognome 0",
    					"referente_telefono" : "3215731234",
    					"referente_email" : ""
    				},
    				{
    					"referente_nome" : "Nome 1",
    					"referente_cognome" : "Cognome 1",
    					"referente_telefono" : "3215731234",
    					"referente_email" : ""
    				},
    				{
    					"referente_nome" : "",
    					"referente_cognome" : "",
    					"referente_telefono" : "",
    					"referente_email" : ""
    				}
    					],
    	"insert_date" : ISODate("2022-08-05T12:36:23.333+0000")
    }
    
    {
    				"_id" : ObjectId("62ecf2a7376c53ea9805393c"),
    				"email" : "info@secondaprova.it",
    				"referente" : [
    				{
    					"referente_nome" : "Nome 00",
    					"referente_cognome" : "Cognome 00",
    					"referente_telefono" : "3215731234",
    					"referente_email" : ""
    				},
    				{
    					"referente_nome" : "Nome 10",
    					"referente_cognome" : "Cognome 10",
    					"referente_telefono" : "3215731234",
    					"referente_email" : ""
    				},
    				{
    					"referente_nome" : "",
    					"referente_cognome" : "",
    					"referente_telefono" : "",
    					"referente_email" : ""
    				}
    					],
    	"insert_date" : ISODate("2022-08-05T12:36:23.333+0000")
    }
    
    e questo e' la pipeline:
    
    pipeline = [
        {
            u"$unwind": {
                u"path": u"$referente.referente_nome",
                u"preserveNullAndEmptyArrays": True
            }
        }, 
        {
            u"$project": {
                u"referente_nome": {
                    u"$concat": [
                        u"$referente_nome",
                        u" ",
                        u"$referente_cognome"
                    ]
                }
            }
        }
    ]
    
    cursor = collection.aggregate(
        pipeline, 
        allowDiskUse = False
    )
    
    quando faccio girare la pipeline non riesco a concatenare i campi referente.nome e referente.cognome. Ottengo il risultato null e poi non esegue l'unwind
  • Re: Aggregate Mongo

    Soluzione trovata. nell'unwind faccio riferimento al nome del campo specifico referente.nome. Invece devo far riferimento all'intero array. In questo caso u"$unwind": { u"path": u"$referente" }
  • Re: Aggregate Mongo

    Ora ho questo problema, logicamente la query mi tira fuori n elementi per quanti sono gli oggetti presenti nell'array. E se voglio tirare dentro solo il primo elemento? cioe quello a indice 0? Ho provato a mettere referente.0 nel project ma non funziona. Qualche suggerimento?
Devi accedere o registrarti per scrivere nel forum
4 risposte