从mongoose 主页:
Mongoose提供了一个直接的、基于模式的解决方案
Mongoose无法从可能唯一的文档集合中推断模式.MongoDB不会对存储在集合中的文档实施模式.
因此,Mongoose在NodeJS原生驱动程序(here)上添加了一层,许多人认为这一层更有效率.但在使用Node时,MongoDB不需要使用它.JS.
mongoose 基本上需要两件事才能工作:
- Schema==这定义了文档 struct (reference).您可以向其他集合(模型)添加validation、新方法、添加虚拟属性、使用data types、建立references.
- Model==这个类在运行时用来表示对集合的查询(reference).模式定义用于构建模型.
因此,正如您在粘贴的示例中看到的,定义了一只小cat Schema
,然后创建了一只Model
Kitten
.使用模式和模型的好处在于,Mongoose随后会强制执行可用的属性/字段.
在一个应用程序中只定义一次Schema
和Model
.因此,通常在应用程序启动时,您需要执行代码来定义它们,然后在整个应用程序生命周期中根据需要使用Model
个实例.
你可能会有更多的理由想使用mongoose .
不过,您完全正确,您可以通过使用NodeJS本机驱动程序来使用更直接的东西,而不需要模式.语法与您展示的类似,但有点复杂:
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
if(err) { return console.dir(err); }
var collection = db.collection('kittens');
collection.find().toArray(function(err, kittens) {
// here ...
});
});
而不是简单的:
Kitten.find(function(err, kittens) {
});
此外,使用Mongoose时,您可能会发现编写更复杂的查询更容易编写和读取:
Kitten.find().where('name', 'Harold').exec(/*callback*/);
我建议阅读更多文档,更好地了解框架,以及它是否符合您的需求.不幸的是,文档有点分散,但是如果你浏览Guide
个标题的子标题,你会有很多有用的信息.