没有模式的猫鼬只读

Mongoose read-only without schema

我在我的 node.js 应用程序中使用 Mongoose 对数据库中的两个集合建模,它将读取和写入这些集合。还有两个集合只能从我的应用程序中读取(这些集合的模型正在另一个应用程序中维护,该应用程序将写入它们)。

如果我需要使用 mongoose 访问这两个只读集合,那么我还必须在此应用程序中维护一个架构。我宁愿不这样做,因为架构将被维护两次,以后可能会导致不一致。

Mongoose 中的默认连接可以通过

创建
Mongoose.connect(dbPath)

给定一个 dbPath(例如 mongodb://localhost/dbname),我如何使用 Mongoose 默认连接来读取 schema/model 未由我的应用程序维护的集合?或者我必须使用本机 MongoDB 驱动程序吗?

如果您只是使用 Mongoose 从集合中读取数据,您可以将架构定义留空。

因此,如果您有一个名为 test 的只读集合,则可以使用如下方式:

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

或者为了获得更好的性能,如果您不需要任何模型实例功能,请在您的查询链中包含 lean()

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

如果您不使用lean(),您需要使用get方法访问文档的属性;例如:

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