Node.js 无模式的Mongoose只读
我在node.js应用程序中使用Mongoose对数据库中的两个集合进行建模,它将读取和写入这两个集合。还有两个集合将从我的应用程序中只读(这些集合的模型将在另一个应用程序中维护,该应用程序将向它们写入) 如果我需要使用mongoose访问这两个只读集合,那么我还必须在这个应用程序中维护一个模式。我不希望这样做,因为模式将被维护两次,并且可能导致以后的不一致性 Mongoose中的默认连接可以通过以下方式创建:Node.js 无模式的Mongoose只读,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在node.js应用程序中使用Mongoose对数据库中的两个集合进行建模,它将读取和写入这两个集合。还有两个集合将从我的应用程序中只读(这些集合的模型将在另一个应用程序中维护,该应用程序将向它们写入) 如果我需要使用mongoose访问这两个只读集合,那么我还必须在这个应用程序中维护一个模式。我不希望这样做,因为模式将被维护两次,并且可能导致以后的不一致性 Mongoose中的默认连接可以通过以下方式创建: Mongoose.connect(dbPath) 给定一个数据库路径(例如mong
Mongoose.connect(dbPath)
给定一个数据库路径(例如
mongodb://localhost/dbname
),如何使用Mongoose默认连接来读取我的应用程序未维护其架构/模型的集合?或者我必须使用本机MongoDB驱动程序进行相同的操作吗?如果只是使用Mongoose读取集合,则可以将架构定义保留为空
因此,如果您有一个名为test
的只读集合,类似这样的集合将起作用:
var Test = mongoose.model('Test', new Schema(), 'test');
Test.findOne({name: 'John'}, function(err, doc) { ... });
或者,为了获得更好的性能,如果不需要任何模型实例功能,请在查询链中包括:
Test.findOne({name: 'John'}).lean().exec(function(err, doc) { ... });
如果不使用lean()
,则需要使用该方法访问文档的属性;例如:
doc.get('name') // instead of doc.name
以这种方式使用模型时,如何引用生成的文档的一个属性?使用点表示法给了我未定义的错误。parse返回“unexpected token”,我对Mongoose有点陌生,但这似乎是一个设计缺陷。如果从现有集合读取不需要架构,为什么需要架构。我遇到过这样的情况:一个系统定义并填充了一个集合,而另一个系统(仅)从中读取。第二个系统将一个模式传递给
model()
,虽然不完整,但似乎并不重要,这令人困惑。在我看来,所涉及的机制本可以得到更明确的界定。