MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

conta il campo del documento secondario e l'importo totale in mongodb

La pipeline di aggregazione di MongoDB è a disposizione per risolvere il tuo problema. Ottieni i dettagli da un array che elabora la mia elaborazione con $unwind e quindi utilizzando $group per "sommare" i totali:

db.collection.aggregate([
    // Unwind the array to de-normalize as documents
    { "$unwind": "$details" },

    // Group on the key you want and provide other values
    { "$group": { 
        "_id": "$details.itemcode",
        "itemname": { "$first": "$details.itemname" },
        "totalprice": { "$sum": "$details.price" },
        "totalqty": { "$sum": "$details.qty" }
    }}
])

Idealmente, vuoi un $match intervieni per filtrare prima tutti i dati irrilevanti. Questa è fondamentalmente una query MongoDB e accetta tutti gli stessi argomenti e operatori.

La maggior parte qui è davvero semplice. Il $unwind è una specie di "JOIN" in SQL tranne per il fatto che in una struttura incorporata il "join" è già stato creato, quindi stai semplicemente "denormalizzando" come farebbe un join tra "uno a molti" relazioni di tabella ma solo all'interno del documento stesso. Fondamentalmente "ripete" le parti del documento "genitore" nell'array per ogni membro dell'array come un nuovo documento.

Quindi $group funziona di una chiave, come in "GRUPPO PER", dove la "chiave" è il _id valore. Tutto quello che c'è è "distinto" e tutti gli altri valori sono raccolti da "operatori di raggruppamento".

Qui è dove operazioni come $first entra. Come descritto nella pagina del manuale, questo prende il valore "primo" dal "confine di raggruppamento" menzionato nella "chiave" in precedenza. Lo desideri perché è "probabile" che tutti i valori di questo campo siano gli stessi, quindi questa è una scelta logica per selezionare semplicemente la "prima" corrispondenza.

Infine c'è il $sum operatore di raggruppamento che fa ciò che dovrebbe essere previsto. Tutti i valori forniti sotto la "chiave" vengono "sommati" o "sommati" insieme per fornire un totale. Proprio come SQL SUM() .

Nota anche che tutti i $ nomi prefissi c'è il modo in cui il framework di aggregazione gestisce le variabili per i nomi di "campo/proprietà" all'interno del documento corrente in elaborazione. "Dot notation" viene utilizzato per fare riferimento ai "campi/proprietà" incorporati nidificati all'interno di un nome di proprietà padre.

È utile imparare l'aggregazione in MongoDB. È per le query generali ciò che qualsiasi cosa al di là di un'istruzione di base "SELECT" è per SQL. Non solo per il "raggruppamento", ma anche per altre manipolazioni.

Leggi la documentazione di tutti gli operatori di aggregazione e dai un'occhiata anche a Mapping da SQL a aggregazione nella documentazione come guida generale se hai una certa familiarità con SQL per cominciare. Aiuta a spiegare concetti e mostra alcune cose che possono essere fatte.