我还在学习Mongodb,Nodejs和Mongoose,所以如果这个问题缺乏理解,请原谅我的无知 .
我发现每个Mongodb集合都必须在Mongoose中进行解剖,这有点多余 . 具体来说,每个Mongodb集合的所有字段及其类型都需要在Mongoose的模式中声明 .
因此,如果我有一个包含共享相同字段的文档的集合,例如:
> db.people.find()
{ "_id" : ObjectId("1111"), "name" : "Alice", "age": 30 }
{ "_id" : ObjectId("2222"), "name" : "Bob", "age": 25 }
{ "_id" : ObjectId("3333"), "name" : "Charlie", "age": 40 }
Mongoose Nodejs连接到这个Mongodb的方式
var mongoose = require('mongoose');
var personSchema = new mongoose.Schema({
name : String,
age : Number
});
mongoose.model("Person", personSchema, 'people');
其中最后一行包含集合名称作为第3个参数(explained here) .
Is it possible to have Mongoose automatically extract the schema somehow from a Mongodb collection for a collection that contains documents of identical fields (i.e. they would have the same schema)? 因此我们不必在Mongoose中定义架构 .
1 回答
Mongoose目前没有办法在给定示例文档的情况下自动构建Schema和Model .
虽然可以编写一个简单的Schema工具文档,它可以很好地处理一些情况,但根据数据库中集合和文档的性质,它不能准确反映数据模型的各个方面 .
例如,如果您有两个相关的集合:
和
如您所见,
stories
字段是与story
集合关联的ObjectId
数组 . 存储在MongoDB集合中时,它将类似于:和故事:
如您所见,
stories
数组仅包含ObjectId
而不存储它映射到的内容(stories
集合中的文档) . 如果没有在架构中 Build 此连接而丢失的Mongoose的一个功能是populate
(reference) .也许更重要的是,使用Mongoose的部分好处是拥有声明的架构 . 虽然它可能是“NoSQL”并且MongoDB允许文档无模式,但实际上许多驱动程序鼓励开发人员拥有模式,因为它有助于在集合中实施一致的文档结构 . 如果你正在进行“ 生产环境 ”开发,那么对于我来说,声明的是粗糙而不是推断的架构似乎是谨慎的 . 虽然您可以使用设计文档,但在源代码中定义了严格的Schema,这不仅使设计成为可能,而且还有助于强制Schema被无意中更改 .
在Mongoose中声明Schema非常容易,每个应用程序实例只需要执行一次 .
您当然可以在NodeJS上使用underlying driver for MongoDB,它根本没有架构支持 .