MongoDB $ Map Operator

MongoDB $ Map Operator
MongoDB è un popolare database orientato al documento NOSQL che viene utilizzato per archiviare e interrogare le grandi quantità di dati. Una delle potenti caratteristiche di MongoDB è la possibilità di utilizzare l'operatore $ map in pipeline di aggregazione per trasformare i documenti in una raccolta. L'operatore $ map consente agli sviluppatori di applicare una funzione specifica a ciascun elemento di un array e restituisce i valori trasformati come nuovo array. L'operatore $ map viene utilizzato nella fase del progetto $ di una pipeline di aggregazione e prende due argomenti: l'espressione di input e l'espressione "come". L'espressione di input è l'array che si desidera trasformare e l'espressione "come" è la funzione che si desidera applicare a ciascun elemento dell'array. L'operatore $ map restituisce un nuovo array con i valori trasformati. Iniziamo con la visualizzazione dei database disponibili in MongoDB.
Test> Mostra dbs
amministratore 40.00 kib
config 112.00 kib
locale 72.00 kib

Utilizzare il database "Test" per iniziare ad aggiungere alcuni dati in un database MongoDB, i.e. "Usa test".

Test> Usa Test
Già nel test DB

Esempio 1:

Ecco un esempio di utilizzo dell'operatore $ map per quadare ogni elemento di un array in una raccolta. Generiamo una nuova raccolta denominata "Info" nel database "Test" di MongoDB lanciando la funzione di createcollection di MongoDB. Il metodo createCollection () restituisce un oggetto con la proprietà "OK" e un valore 1 che indica che la raccolta viene creata correttamente.

Test> db.CreateCollection ("Informazioni")
ok: 1

Dopo la generazione della raccolta, inseriamo alcuni record di tipo array. Pertanto, la funzione InsertMany è gettata qui per aggiungere tre record, ciascuno contenente il campo "ARR" di un tipo di array con alcuni valori numerici.

Test> db.Informazioni.InsertMany ([id: 1, arr: [2, 4, 6], id: 2, arr: [3, 5, 7], id: 3, arr: []])
riconosciuto: vero,
inseritedids:
'0': objectId ("63c4d968ac8011ecc27d7a35"),
'1': objectId ("63c4d968ac8011ecc27d7a36"),
'2': ObjectId ("63C4D968AC8011ECC27D7A37")

Dopo il riuscito inserimento dei record nella raccolta "Informazioni", puoi dare un'occhiata utilizzando la funzione "Trova" come abbiamo usato nella seguente query attaccata:

Test> db.Informazioni.Trovare()
[
_id: objectId ("63c4d968ac8011ecc27d7a35"), id: 1, arr: [2, 4, 6],
_id: objectId ("63c4d968ac8011ecc27d7a36"), id: 2, arr: [3, 5, 7],
_id: objectId ("63c4d968ac8011ecc27d7a37"), id: 3, arr: []
"

In questo esempio, l'operatore MAP viene utilizzato per aggiungere ciascun elemento nell'array "ARR" per il documento per tutti e tre i record. L'input per l'operatore della mappa è impostato su "$ arr" che fa riferimento all'array "arr" nei documenti della raccolta "Info". Il parametro "AS" è impostato su "N" che viene utilizzato come segnaposto per ciascun elemento nell'array all'interno della funzione. Il parametro "in" contiene la funzione che, in questo caso, è l'operatore $ ADD che aggiorna ogni elemento di un array "ARR" aggiungendo 1. L'output di questa operazione è un nuovo array con il numero aggiornato di elementi, ma ogni elemento è la somma dell'elemento originale e "1" come visualizzato nella seguente uscita:

Test> db.Informazioni.Aggregate ([$ Progetto: a: $ mappa: input: "$ arr", as: "n", in: $ aggiungi: ["$$ n", 1]])
[
_id: objectId ("63c4d968ac8011ecc27d7a35"), a: [3, 5, 7],
_id: objectId ("63c4d968ac8011ecc27d7a36"), a: [4, 6, 8],
_id: objectId ("63c4d968ac8011ecc27d7a37"), a: []
]

Esempio 2:

Facciamo un altro esempio di utilizzo dell'operatore "mappa" di MongoDB. A partire da questa illustrazione, è necessario creare una nuova raccolta denominata "Informazioni" nel database di test. Il metodo createCollection () viene utilizzato per creare una nuova raccolta nel database corrente che è "test". Dato che l'abbiamo già creato attraverso il metodo "createcollection" del database, saltiamo questo passo qui.

La seguente query utilizza l'interfaccia della riga di comando MongoDB (CLI) per inserire più documenti in una raccolta chiamata "Data". Ogni documento rappresenta una città e la sua distanza in miglia rispetto alle altre località. Il comando utilizza il metodo InsertMany () per inserire contemporaneamente i tre documenti. Ogni documento ha un campo "città" con un valore di stringa e un campo "distanza" con una serie di numeri. Il metodo InsertMany () restituisce un oggetto con le proprietà "riconosciute" e "inserite" che confermano che l'operazione ha esito positivo e fornisce gli objectid univoci assegnati a ciascun documento inserito.

Test> db.Dati.InsertMany (["City": "NewYork", "Distance": [22.56, 66.7, 88.1],
... "Città": "Londra", "Distanza": [77.76, 14.72, 11.56],
... "Città": "Texas", "Distanza": [44.70, 64.99, 94.6]])

riconosciuto: vero,
inseritedids:
'0': objectId ("63c4e24cac8011ecc27d7a38"),
'1': objectId ("63c4e24cac8011ecc27d7a39"),
'2': objectId ("63c4e24Cac8011ecc27d7a3a")

Questa query viene utilizzata per recuperare tutti i documenti da una raccolta chiamata "Data". Il metodo Find () viene utilizzato con una query vuota , il che significa che restituisce tutti i documenti nella raccolta. L'output è un array di documenti che corrisponde alla query in cui ogni documento ha un campo "_id" che è un oggetto univoco assegnato ad esso, un campo "città" con un valore di stringa e un campo "distanza" con un array di numeri. Questa query mostra tutti i documenti che sono stati inseriti.

Test> db.Dati.Trovare()
[
_id: objectId ("63c4e24cac8011ecc27d7a38"), città: 'newyork', distanza: [22.56, 66.7, 88.1],
_id: objectId ("63c4e24cac8011ecc27d7a39"), città: 'London', distanza: [77.76, 14.72, 11.56],
_id: objectId ("63c4e24cac8011ecc27d7a3a"), città: "Texas", distanza: [44.7, 64.99, 94.6]
"

La seguente query utilizza il database MongoDB "Test" per eseguire un'operazione aggregata sulla raccolta "dati". Il metodo aggregato () viene utilizzato con un array che contiene una singola fase della pipeline che è la fase del progetto $. La fase del progetto $ viene utilizzata per rimodellare i documenti nella raccolta specificando un nuovo set di campi. In questo caso, il campo della città viene passato e viene aggiunto un nuovo campo, "agg". Il nuovo campo "agg" viene creato utilizzando l'operatore $ map che applica un'espressione specificata a ciascun elemento di un array di input e restituisce un array di output con lo stesso numero di elementi.

L'operatore $ map prende tre argomenti: l'array di input che è "$ distanza", un nome variabile per l'elemento corrente nell'array di input che è "DC" e un'espressione applicata a ciascun elemento dell'array di input. In questo caso, l'espressione è di troncare il valore decimale della distanza usando l'operatore $ trunc. Il risultato è una matrice di documenti con la stessa struttura dei documenti originali, ma con un ulteriore campo "agg" che contiene una serie di numeri interi che sono troncati dal campo "distanza".

Test> db.Dati.Aggregate ([$ Project: City: "$ City", agg:
... $ mappa: input: "$ distanza", come: "dc", in: $ trunc: "$$ dc"])
[
_id: objectId ("63c4e24cac8011ecc27d7a38"), città: 'newyork', agg: [22, 66, 88],
_id: objectId ("63c4e24cac8011ecc27d7a39"), città: 'London', agg: [77, 14, 11],
_id: objectId ("63c4e24cac8011ecc27d7a3a"), città: 'texas', agg: [44, 64, 94]
"

Conclusione

Questa guida elabora l'uso dell'operatore "mappa" in MongoDB molto chiaramente nella sua introduzione. Per supportare la spiegazione che abbiamo fornito nell'introduzione, abbiamo spiegato due esempi correlati in questo articolo. Attraversando questi esempi, è possibile aggiungere un valore a un elemento array di un determinato documento e puoi troncare i punti decimali da specifici elementi dell'array. In conclusione, l'operatore $ map di MongoDB è una potente caratteristica che consente agli sviluppatori di trasformare le matrici di documenti in una raccolta. È facile da usare e può essere utilizzato in combinazione con gli altri operatori di aggregazione per eseguire trasformazioni più complesse. Con $ map, gli sviluppatori possono facilmente manipolare i dati e renderli più utili per le loro applicazioni.