Differenza tra MongoDB e Mongoose


157

Volevo usare il database mongodb, ma ho notato che esistono due database diversi con il loro sito Web e i loro metodi di installazione: mongodb e mongoose. Quindi mi sono posto questa domanda: "Quale uso?".

Quindi, per rispondere a questa domanda, chiedo alla comunità se potresti spiegare quali sono le differenze tra questi due? E se possibile pro e contro? Perché sembrano davvero molto simili a me.


Risposte:


233

Presumo che tu sappia già che MongoDB è un sistema di database NoSQL che archivia i dati sotto forma di documenti BSON. La tua domanda, tuttavia, riguarda i pacchetti per Node.js.

In termini di Node.js, mongodb è il driver nativo per interagire con un'istanza di mongodb e mongoose è uno strumento di modellazione di oggetti per MongoDB.

Mongoose è basato sul driver MongoDB per fornire ai programmatori un modo per modellare i propri dati.

EDIT: Non voglio commentare quale sia meglio, in quanto ciò renderebbe supponente questa risposta. Tuttavia, elencherò alcuni vantaggi e svantaggi dell'utilizzo di entrambi gli approcci.

Usando Mongoose, un utente può definire lo schema per i documenti in una particolare raccolta. Offre molta comodità nella creazione e gestione dei dati in MongoDB. L'aspetto negativo è che l'apprendimento della mangusta può richiedere del tempo e presenta alcune limitazioni nella gestione di schemi piuttosto complessi.

Tuttavia, se lo schema di raccolta è imprevedibile o si desidera un'esperienza simile a una shell Mongo all'interno di Node.js, procedere e utilizzare il driver MongoDB. È il più semplice da raccogliere. Lo svantaggio qui è che dovrai scrivere maggiori quantità di codice per convalidare i dati e il rischio di errori è maggiore.


9
Questa è una domanda piuttosto basata sull'opinione. Alcuni potrebbero preferire un'API di livello inferiore. Perché non dai un'occhiata a Mongoose e al driver nativo e poi decidi quale è meglio per te?
juunas,

1
@ Michael9 Il driver MongoDB nativo per Node.js ha lo stesso nome. Si prega di notare le parole "in termini di Node.js ...". La tua modifica non è corretta.
ZeMoon,

@ZeMoon in questo caso dovrebbe essere mongodbnon MongoDB: P
styvane

Potrebbe esserci una differenza pratica in cui la mangusta si collega ai nomi delle raccolte al plurale?
Antony Gibbs,

2
Si dovrebbe anche considerare il fattore di prestazione, si prega di fare riferimento a questo url, questo ragazzo ha condiviso benchmark fantastici. medium.com/@bugwheels94/…
DHIRAJ KATEKAR


14

Un'altra differenza che ho trovato per quanto riguarda sia è che è abbastanza facile da connect to multiple databasescon mongodb native drivermentre si deve arounds utilizzo di lavoro in mongoosecui hanno ancora alcuni svantaggi.

Quindi, se vuoi scegliere un'applicazione multi-tenant, scegli il driver nativo mongodb.


6

Se si prevede di utilizzare questi componenti insieme al proprio codice proprietario, consultare le informazioni di seguito.

MongoDB:

  1. È un database.
  2. Questo componente è regolato dalla licenza Affero General Public License (AGPL).
  3. Se colleghi questo componente insieme al tuo codice proprietario, devi rilasciare l'intero codice sorgente di dominio pubblico, a causa del suo effetto virale come (GPL, LGPL ecc.)
  4. Se stai ospitando la tua applicazione sul cloud, verrà applicato il (2) e dovrai inoltre rilasciare le informazioni di installazione agli utenti finali.

Mangusta:

  1. È uno strumento di modellazione di oggetti.
  2. Questo componente è regolato dalla licenza MIT.
  3. Autorizzato a utilizzare questo componente insieme al codice proprietario, senza alcuna restrizione.
  4. È consentita la spedizione dell'applicazione utilizzando qualsiasi supporto o host.

1
Ho pensato di menzionarlo. I componenti Server prima del 16 ottobre 2018 erano AGPL, ma ora hanno una licenza personalizzata. anche se il driver (mongodb) è sempre stato Apache e non ha mai avuto importanza per il codice proprietario. Rif: mongodb.com/community/licensing
DrHouse

2
La risposta per MongoDB parte 4 non è corretta. Generalmente le applicazioni client utilizzano i driver MongoDB (ad esempio il driver MongoDB Node.JS) che sono concessi in licenza con Apache v2. Se stai modificando il codice del server MongoDB stesso (il database) e lo ridistribuisci, allora hai bisogno di un accordo commerciale o open source. La modifica della licenza SSPL è solo un'aggiunta per la clausola dei fornitori di cloud cloud as-a-service, ovvero esporre le funzionalità del database simili a MongoDB Atlas o AWS RDS, ecc.
Wan Bachtiar,

6

mongo-dbprobabilmente non è un'ottima scelta per i nuovi sviluppatori.
D'altra parte, mongoosecome ORM (Object Relational Mapping) può essere una scelta migliore per i neofiti.


2
Benvenuto in Stack Overflow! La tua risposta potrebbe essere preziosa ma mancano alcune spiegazioni. Forse puoi ancora aggiungere alcune parole alla tua risposta. Ecco una guida per dare buone risposte .
David

4

Mongodb e Mongoose sono due driver diversi per interagire con il database MongoDB.

Mongoose : libreria ODM (object data modelling) che fornisce un ambiente di modellazione rigoroso per i tuoi dati. Utilizzato per interagire con MongoDB, semplifica la vita fornendo comodità nella gestione dei dati.

Mongodb : driver nativo in Node.js per interagire con MongoDB.


2

Mongodb e Mongoose sono due cose completamente diverse!

Mongodb è il database stesso , mentre Mongoose è uno strumento di modellazione di oggetti per Mongodb

EDIT: Come sottolineato MongoDB è il pacchetto npm, grazie!


40
mongodb non è un database, è un pacchetto di nodi che è il driver mongo nativo. È l'API di livello più basso per l'accesso a un server mongo dal nodo js.
mariocatch,

3
La domanda riguardava il driver nativo Mongodb per operazioni db vs mangusta. La risposta non è sul punto.
sarora,

@mariocatch MongoDB è un database di documenti con la scalabilità e la flessibilità che desideri con le query e l'indicizzazione di cui hai bisogno. È scritto sulla homepage della sua documentazione.
Deep Kakkar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.