2015-02-20 14 views
5

Sto usando Mongoose nella mia app node.js per modellare due raccolte nel database, che leggerà e scriverà. Ci sono altre due raccolte che verranno lette solo dalla mia app (il modello per queste raccolte viene mantenuto in un'altra app, che scriverà su di esse).Mango di sola lettura senza schema

Se ho bisogno di accedere alle due raccolte di sola lettura usando mangusta, allora dovrò mantenere uno schema all'interno di questa app. Preferirei non farlo, poiché lo schema verrà mantenuto due volte e potrebbe causare incoerenze in seguito.

Il collegamento di default in Mongoose possono essere creati da

Mongoose.connect(dbPath) 

Dato un dbPath (ad es mongodb://localhost/dbname), come posso utilizzare la connessione Mangusta predefinita di leggere da una collezione il cui schema/modella non è mantenuto da la mia app? O dovrò usare il driver MongoDB nativo per lo stesso?

risposta

9

Se si utilizza semplicemente Mangusta per leggere da una raccolta, è possibile lasciare vuota la definizione dello schema.

Quindi, se si ha una raccolta di sola lettura di nome test, qualcosa di simile a questo lavoro:

var Test = mongoose.model('Test', new Schema(), 'test'); 
Test.findOne({name: 'John'}, function(err, doc) { ... }); 

O per migliorare le prestazioni, includono lean() nella vostra catena query se non hai bisogno di alcuna del modello funzionalità esempio:

Test.findOne({name: 'John'}).lean().exec(function(err, doc) { ... }); 

Se non si utilizza lean() è necessario accedere alle proprietà del documento utilizzando il metodo get; ad esempio:

doc.get('name') // instead of doc.name 
+0

Quando si utilizza il modello in questo modo, come è possibile fare riferimento a una delle proprietà del documento risultante? L'uso di dot-notation mi sta dando errori non definiti. JSON.parse restituisce "token imprevisto _" – tutley

+1

@tutley Visualizza la risposta aggiornata. – JohnnyHK