ANNOUNCEMENTVoyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas. Learn more >
NEWSLearn why MongoDB was named a leader in the 2024 Gartner® Magic Quadrant™ Read the report >
NEWMongoDB 8.0: Experience unmatched speed and performance. Check it out >

Operazioni CRUD di MongoDB

Sommario


Definizione di base dell'operazione CRUD

La maggior parte delle interazioni transazionali di un utente con una piattaforma digitale, come un sito o un'applicazione web, include richieste per quattro operazioni di base:

  • Creazione di un nuovo elemento (ad esempio, un profilo cliente).
  • Lettura (come il recupero dei dettagli dell'ordine per un utente).
  • Aggiornamento delle informazioni (come il numero di cellulare o l'indirizzo e-mail di un utente).
  • Eliminazione (ad esempio, un numero di telefono di lavoro).

CRUD è orientato ai dati ed è standardizzato in base ai verbi d'azione HTTP. Il front end di un'applicazione acquisisce le informazioni e le invia come richiesta HTTP al middleware, che richiama le funzioni del database appropriate per completare l'attività. Queste quattro funzioni di base sono definite collettivamente CRUD, l'acronimo di create, read, update e delete.

HTTP and corresponding database CRUD operations

Esempi di operazioni di base

I metodi CRUD rappresentano il modo principale per gestire i dati nei database. Che si tratti di un'operazione in blocco o individuale, le operazioni CRUD sono essenziali per ogni applicazione.

Alcuni esempi di un'operazione di creazione sono la creazione di un nuovo profilo utente nel database, di un carrello acquisti per l'utente e di un nuovo catalogo libri (inserimento in blocco).

Alcuni esempi di operazioni di lettura sono l'acquisizione dei dettagli del prodotto per un criterio di ricerca specifico da parte dell'utente, ad esempio, quando un utente cerca un telefono cellulare del marchio "apple", la visualizzazione di tutti i modelli di iPhone, la visualizzazione delle informazioni del carrello prodotti dell'utente, la visualizzazione dei dettagli dei dipendenti sul portale.

Tra gli esempi di operazioni di aggiornamento si annoverano l'aggiornamento delle informazioni personali di un utente, delle informazioni sul carrello, dell'indirizzo di fatturazione, del timestamp o del numero di serie di una determinata gamma di prodotti (aggiornamento in blocco).

Alcuni esempi di operazioni di eliminazione sono l'eliminazione dei prodotti dal carrello di un utente, l'eliminazione di un libro dai preferiti e l'eliminazione di tutti i record meno recenti in un determinato periodo di tempo (eliminazione in blocco).

Esploriamo ulteriormente la definizione di CRUD ed esaminiamo come eseguire le operazioni CRUD di MongoDB con il MongoDB Query Language (MQL).

Che cos'è CRUD in MongoDB?

Le operazioni CRUD descrivono le convenzioni di un'interfaccia utente che consente agli utenti di visualizzare, cercare e modificare parti del database. MongoDB offre un modo elegante di eseguire operazioni CRUD con il linguaggio di programmazione prescelto tramite i suoi driver.

I documenti MongoDB vengono modificati connettendosi a un server, interrogando i documenti appropriati, quindi modificando le proprietà delle impostazioni prima di inviare i dati al database per l'aggiornamento.

Per quanto riguarda le singole operazioni CRUD:

  • L'operazione create viene utilizzata per inserire nuovi documenti nel database MongoDB.
  • L'operazione read per interrogare un documento nel database.
  • L'operazione update per modificare i documenti esistenti nel database.
  • L'operazione delete per rimuovere i documenti dal database.

Come eseguire le operazioni CRUD

Dopo aver definito le operazioni CRUD di MongoDB, possiamo dare un'occhiata a come eseguire le singole operazioni e manipolare i documenti in un database MongoDB. Approfondiamo i processi di creazione, lettura, aggiornamento ed eliminazione dei documenti, esaminando ogni singola operazione.

Metodi MongoDB per operazioni CRUD

Crea operazione

Per CRUD di MongoDB, se la tabella specificata non esiste, l'operazione create quando eseguita, creerà la tabella. Le operazioni di creazione in MongoDB creano una singola tabella, non più raccolte. Le operazioni di inserimento in MongoDB sono atomiche a livello di un unico documento.

MongoDB consente due diverse operazioni di creazione utilizzabili per inserire documenti in una tabella:

insertOne()

Come indica il nome, insertOne() consente di inserire un documento nella tabella. Per questo esempio, lavoreremo con una tabella denominata RecordsDB. Possiamo inserire una singola voce nella nostra tabella chiamando il metodo insertOne() su RecordsDB. Forniamo quindi le informazioni che vogliamo inserire sotto forma di coppie chiave-valore, stabilendo lo schema.

db.RecordsDB.insertOne({
    name: "Marsh",
    age: "6 years",
    species: "Dog",
    ownerAddress: "380 W. Fir Ave",
    chipped: true
})

Se l'operazione di creazione va a buon fine, viene creato un nuovo documento. La funzione restituirà un oggetto in cui “acknowledged“ è “true“ e “insertID“ è l'“ObjectId“ appena creato.

> db.RecordsDB.insertOne({
... name: "Marsh",
... age: "6 years",
... species: "Dog",
... ownerAddress: "380 W. Fir Ave",
... chipped: true
... })
{
        "acknowledged" : true,
        "insertedId" : ObjectId("5fd989674e6b9ceb8665c57d")
}

insertMany()

È possibile inserire più elementi contemporaneamente chiamando il metodo insertMany() sulla tabella desiderata. In questo caso, passiamo più voci nella tabella prescelta (RecordSDB) e li separiamo con virgole. All'interno delle parentesi, utilizziamo le parentesi per indicare che stiamo passando un elenco di più voci. Questo è il cosiddetto metodo annidato.

db.RecordsDB.insertMany([{
    name: "Marsh",
    age: "6 years",
    species: "Dog",
    ownerAddress: "380 W. Fir Ave",
    chipped: true},
      {name: "Kitana", 
      age: "4 years", 
      species: "Cat", 
      ownerAddress: "521 E. Cortland", 
      chipped: true}])

db.RecordsDB.insertMany([{ name: "Marsh", age: "6 years", species: "Dog", 
ownerAddress: "380 W. Fir Ave", chipped: true}, {name: "Kitana", age: "4 years", 
species: "Cat", ownerAddress: "521 E. Cortland", chipped: true}])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("5fd98ea9ce6e8850d88270b4"),
                ObjectId("5fd98ea9ce6e8850d88270b5")
        ]
}

Operazioni di lettura

Le operazioni di lettura read consentono di fornire filtri e criteri di query speciali che permettono di specificare i documenti desiderati. La documentazione di MongoDB contiene maggiori informazioni sui filtri di query disponibili. I modificatori di query possono essere utilizzati anche per modificare il numero di risultati restituiti.

MongoDB dispone di due metodi per leggere i documenti di una tabella:


find()

Per ricavare tutti i documenti di una tabella, possiamo semplicemente utilizzare il metodo find() sulla tabella scelta. L'esecuzione del solo metodo find() senza argomenti restituirà tutti i record attualmente presenti nella tabella.

db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "6 years", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "3 years", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd994efce6e8850d88270ba"), "name" : "Kevin", "age" : "8 years", "species" : "Dog", "ownerAddress" : "900 W. Wood Way", "chipped" : true }

Nel risultato, possiamo vedere tutti i record presenti nella tabella. Si noti che a ogni record è assegnato un “ObjectId“ mappato alla chiave “-id“.

Se si desidera essere più specifici con un'operazione di lettura e trovare la sottosezione desiderata dei record, è possibile utilizzare i criteri di filtro citati in precedenza per scegliere i risultati che devono essere restituiti. Uno dei modi più comuni per filtrare i risultati consiste nel cercare per valore.

db.RecordsDB.find({"species":"Cat"})
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }

findOne()

Per ottenere un documento che soddisfi i criteri di ricerca, possiamo semplicemente usare il metodo findOne() sulla tabella prescelta. Se più documenti soddisfano la query, questo metodo restituisce il primo documento in base all'ordine naturale che riflette l'ordine dei documenti sul disco. Se nessun documento soddisfa i criteri di ricerca, la funzione restituisce null. La funzione assume la seguente forma di sintassi.

db.{collection}.findOne({query}, {projection})

Prendiamo la seguente tabella, ad esempio RecordSDB.

{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "8 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "6 years", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "3 years", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd994efce6e8850d88270ba"), "name" : "Kevin", "age" : "8 years", "species" : "Dog", "ownerAddress" : "900 W. Wood Way", "chipped" : true }

Ed eseguiamo la seguente riga di codice:

db.RecordsDB.find({"age":"8 years"})

Otterremmo il seguente risultato:

{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "8 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }

Si noti che anche se due documenti soddisfano i criteri di ricerca, viene restituito solo il primo documento che corrisponde alla condizione di ricerca.

Operazioni di aggiornamento

Come le operazioni di creazione, le operazioni update operano su una singola tabella e sono atomiche a livello di singolo documento. Un'operazione di aggiornamento richiede filtri e criteri per selezionare i documenti da aggiornare.

Quando si aggiornano i documenti, si deve prestare attenzione, poiché gli aggiornamenti sono permanenti e non possono essere ripristinati. Questo vale anche per le operazioni di eliminazione.

Per MongoDB CRUD, l'aggiornamento dei documenti può avvenire con tre diversi metodi:


updateOne()

Possiamo aggiornare un record attualmente esistente e modificare un singolo documento con un'operazione di aggiornamento. Per farlo, usiamo il metodo updateOne() su una tabella scelta, che in questo caso è “RecordsDB“. Per aggiornare un documento, forniamo al metodo due argomenti: un filtro di aggiornamento e un'azione di aggiornamento.

Il filtro di aggiornamento definisce gli elementi da aggiornare e l'azione di aggiornamento definisce come aggiornarli. Per prima cosa passiamo nel filtro di aggiornamento. Quindi, utilizziamo la chiave “$set“ e forniamo i campi che vogliamo aggiornare come valore. Questo metodo aggiorna il primo record che corrisponde al filtro fornito.

db.RecordsDB.updateOne({name: "Marsh"}, {$set:{ownerAddress: "451 W. Coffee St. A204"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "6 years", "species" : "Dog", "ownerAddress" : "451 W. Coffee St. A204", "chipped" : true }

updateMany()

updateMany() ci consente di aggiornare più voci passando un elenco di voci, come abbiamo fatto quando abbiamo inserito più voci. Questa operazione di aggiornamento utilizza la stessa sintassi per l'aggiornamento di un singolo documento.

db.RecordsDB.updateMany({species:"Dog"}, {$set: {age: "5"}})
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
> db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "5", "species" : "Dog", "ownerAddress" : "451 W. Coffee St. A204", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "5", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd994efce6e8850d88270ba"), "name" : "Kevin", "age" : "5", "species" : "Dog", "ownerAddress" : "900 W. Wood Way", "chipped" : true }

replaceOne()

Il metodo replaceOne() sostituisce un singolo documento nella tabella specificata. replaceOne() sostituisce l'intero documento, quindi i campi del vecchio documento non contenuti nel nuovo andranno persi.

db.RecordsDB.replaceOne({name: "Kevin"}, {name: "Maki"})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "5", "species" : "Dog", "ownerAddress" : "451 W. Coffee St. A204", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "5", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }
{ "_id" : ObjectId("5fd994efce6e8850d88270ba"), "name" : "Maki" }

Operazioni di eliminazione

Le operazioni Delete operano su un'unica tabella, come le operazioni di aggiornamento e creazione. Anche le operazioni di eliminazione sono atomiche per un singolo documento. Puoi effettuare operazioni di eliminazione con filtri e criteri per specificare quali documenti eliminare da una tabella. Le opzioni di filtro si basano sulla stessa sintassi utilizzata per le operazioni di lettura.

MongoDB dispone di due metodi diversi per eliminare i record da una tabella:

deleteOne()

deleteOne() rimuove un documento da una tabella specificata sul MongoDB server. Un criterio di filtro viene utilizzato per specificare l'elemento da eliminare. Elimina il primo record che corrisponde al filtro.

db.RecordsDB.deleteOne({name:"Maki"})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }
{ "_id" : ObjectId("5fd993a2ce6e8850d88270b7"), "name" : "Marsh", "age" : "5", "species" : "Dog", "ownerAddress" : "451 W. Coffee St. A204", "chipped" : true }
{ "_id" : ObjectId("5fd993f3ce6e8850d88270b8"), "name" : "Loo", "age" : "5", "species" : "Dog", "ownerAddress" : "380 W. Fir Ave", "chipped" : true }

deleteMany()

deleteMany() è un metodo utilizzato per eliminare più documenti da una tabella desiderata con una singola operazione di eliminazione. Un elenco viene passato nel metodo e i singoli elementi vengono definiti con criteri di filtro come in deleteOne().

db.RecordsDB.deleteMany({species:"Dog"})
{ "acknowledged" : true, "deletedCount" : 2 }
> db.RecordsDB.find()
{ "_id" : ObjectId("5fd98ea9ce6e8850d88270b5"), "name" : "Kitana", "age" : "4 years", "species" : "Cat", "ownerAddress" : "521 E. Cortland", "chipped" : true }

Prestazioni CRUD relazionali e non relazionali

I database NoSQL sono ottimizzati meglio per le operazioni di creazione e lettura e offrono maggiore scalabilità. Pertanto, sono adatti a carichi più elevati (gestione di più operazioni CRUD). Sono anche flessibili in termini di archiviazione delle informazioni.

In un esperimento dettagliato condotto da ResearchGate sulle operazioni CRUD effettuate con diversi tipi di database NoSQL e SQL, si è concluso che i database NoSQL hanno ottenuto risultati notevolmente migliori dei database SQL in tutte le operazioni CRUD, in particolare quando il numero di operazioni era elevato. Ad esempio, MongoDB eccelleva nel recupero dei dati (operazioni di lettura), con un tempo medio di prestazioni di 43,5 ms per 100.000 operazioni (trova/seleziona). MongoDB ha anche il vantaggio di fornire aggiornamenti atomici (aggiornamenti a livello di campo), operazione che richiede più tempo in qualsiasi altro database orientato ai documenti.

Questo articolo riporta informazioni di base su CRUD con alcuni esempi dell'esecuzione di operazioni CRUD in MongoDB. MongoDB Atlas consente di eseguire operazioni CRUD con l'IU in modo semplice. Consulta il manuale di MongoDB per apprendere ulteriori concetti fondamentali di CRUD MongoDB e sviluppare applicazioni altamente performanti e scalabili.

Domande frequenti

Quali sono i principi di CRUD?

L'acronimo CRUD indica le quattro operazioni di base che ogni applicazione deve essere in grado di eseguire, ovvero le operazioni di creazione, lettura, aggiornamento ed eliminazione. Ciò significa che un'applicazione deve essere in grado di inserire i dati nel database, leggere i dati del database, aggiornare i dettagli del database ed eliminare i dati dal database, secondo le esigenze.

Che cos'è un'app CRUD?

Un'app crud si affida alle operazioni crud per tutte le transazioni e le operazioni. Ha un'interfaccia utente (front end), un controller o API e un database che gestisce le operazioni CRUD.

Che cosa sono le operazioni CRUD?

Le operazioni CRUD sono le funzioni di base che ogni applicazione deve eseguire per scambiare dati con un utente web, ad esempio per la creazione di un nuovo profilo utente (CREATE), il recupero dei dettagli del prodotto da un database (READ), l'aggiornamento delle informazioni sui dipendenti sul portale dei dipendenti (UPDATE) e la rimozione di un particolare prodotto da un catalogo (DELETE).

Che cos'è CRUD?

CRUD è un acronimo che definisce l'insieme di operazioni di base che ogni applicazione deve essere in grado di eseguire. Significa creare, leggere, aggiornare ed eliminare.

Pronto per iniziare?

Crea un nuovo cluster o migra a MongoDB Atlas senza alcuna interruzione del servizio.