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

interrogare una raccolta senza passare lo schema in mongoose

Dalla home page di Mongoose:

Mongoose fornisce una soluzione semplice e basata su schemi per modellare i dati dell'applicazione e include casting di tipo integrato, convalida, creazione di query, hook di logica aziendale e altro ancora, pronto all'uso.

Mongoose non può dedurre da una raccolta di documenti potenzialmente univoci uno schema. MongoDB non applica lo schema ai documenti archiviati in una raccolta.

Quindi, Mongoose aggiunge uno strato sul driver nativo NodeJS (qui) che molti trovano più produttivo. Non è un requisito da utilizzare con MongoDB quando si utilizza Node.JS.

Mongoose ha bisogno fondamentalmente di due cose per funzionare:

  1. Schema ==definisce la struttura del documento (riferimento). Puoi aggiungere convalida, nuovi metodi, aggiungere proprietà virtuali, utilizzare tipi di dati, stabilire riferimenti ad altre raccolte (modelli).
  2. Model ==questa è la classe che viene quindi utilizzata in fase di esecuzione per esprimere query su raccolte (riferimento). Una definizione di schema viene utilizzata per costruire un modello.

Quindi, come hai visto nell'esempio che hai incollato, c'è un gattino Schema definito, quindi un Model Kitten è creato. La cosa bella dell'utilizzo di uno schema e di un modello è che Mongoose applica quindi le proprietà/campi disponibili.

Definisci solo lo Schema se Model s una volta in un'applicazione. Quindi, di solito all'avvio dell'applicazione, dovrai eseguire il codice per definirli, quindi utilizzare il Model istanze secondo necessità durante tutto il ciclo di vita dell'applicazione.

Ci sono molti altri motivi per cui vorresti usare potenzialmente Mongoose.

Hai assolutamente ragione però, potresti semplicemente usare qualcosa di più diretto, senza uno schema usando il driver nativo di NodeJS. La sintassi sarebbe simile a quella che hai mostrato, ma un po' più complessa:

MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
  if(err) { return console.dir(err); }

  var collection = db.collection('kittens');

    collection.find().toArray(function(err, kittens) {
        // here ...
    });    
});

Piuttosto che il semplice:

Kitten.find(function(err, kittens) {

});

Inoltre, quando usi Mongoose, potresti scoprire che scrivere query più complesse è più facile da scrivere e leggere:

Kitten.find().where('name', 'Harold').exec(/*callback*/);

Suggerirei di leggere più documentazione per avere un'idea migliore del framework e se è una buona corrispondenza per le tue esigenze. La documentazione è purtroppo un po' sparpagliata, ma se si passa attraverso i sottotitoli della Guide voce, avrai a disposizione molte buone informazioni.