2015-02-20 13 views
5

Ich verwende Mongoose in meiner node.js-App, um zwei Sammlungen in der Datenbank zu modellieren, die gelesen und geschrieben werden. Es gibt zwei weitere Sammlungen, die nur von meiner App gelesen werden können (das Modell für diese Sammlungen wird in einer anderen App verwaltet, in die geschrieben wird).Mongoose schreibgeschützt ohne Schema

Wenn ich mit Mungose ​​auf die beiden schreibgeschützten Sammlungen zugreifen muss, muss ich auch ein Schema in dieser App pflegen. Ich würde das lieber nicht tun, da das Schema zweimal gepflegt wird und später zu Inkonsistenzen führen könnte.

Die Standardverbindung in Mongoose kann durch

Mongoose.connect(dbPath) 

Bei einem DBPATH (zB mongodb://localhost/dbname) erstellt werden, wie kann ich die Mongoose Standardverbindung verwenden, aus einer Sammlung, deren Schema/Modell zu lesen ist, nicht aufrechterhalten wird durch meine App? Oder muss ich den nativen MongoDB-Treiber für das gleiche verwenden?

Antwort

9

Wenn Sie Mongoose nur zum Lesen aus einer Sammlung verwenden, können Sie die Schemadefinition leer lassen.

Also, wenn Sie eine schreibgeschützte Sammlung hatte test genannt, so etwas wie dies funktionieren wird:

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

Oder für eine bessere Leistung, umfassen lean() in Ihrer Abfrage Kette, wenn Sie eines Modells nicht brauchen Beispiel Funktionalität:

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

Wenn Sie nicht lean() verwenden Sie müssen die Eigenschaften des doc die get Methode zuzugreifen; Beispiel:

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

Wenn Sie das Modell auf diese Weise verwenden, wie können Sie auf eine der Eigenschaften des resultierenden Dokuments verweisen? Die Verwendung der Punktnotation führt zu undefinierten Fehlern. JSON.parse gibt "unerwartetes Token _" zurück – tutley

+1

@tutley Siehe aktualisierte Antwort. – JohnnyHK