从Mongoose首页得知:
Mongoose提供了一种基于模式的简单解决方案,用于建模应用程序数据,并内置类型转换、验证、查询构建、业务逻辑钩子等功能。
Mongoose无法从一组可能唯一的文档中推断出模式。MongoDB不对存储在集合中的文档强制执行模式。
因此,Mongoose在NodeJS本地驱动程序(在此处)上添加了一层,许多人认为更加高效。然而,在使用Node.JS时使用MongoDB并不是必需的。
Mongoose需要两个基本要素才能工作:
- Schema == 这定义了文档结构(参考)。您可以添加验证、新方法、添加虚拟属性、使用数据类型、建立到其他集合(模型)的引用。
- Model == 这是在运行时用于表达对集合的查询的类(参考)。一个Schema定义被用来构建一个Model。
因此,如您所见,在您复制的示例中,有一个kitten Schema
定义,然后创建了一个Model
Kitten
。使用模式和模型的好处是Mongoose强制实施可用的属性/字段。
在应用程序中只需定义一次Schema
s和Model
s,通常在应用程序启动时需要执行代码来定义它们,然后在整个应用程序生命周期中根据需要使用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) {
});
});
不是简单的:
Kitten.find(function(err, kittens) {
});
此外,使用Mongoose时,你可能会发现编写和阅读更复杂的查询更容易:
Kitten.find().where('name', 'Harold').exec(/*callback*/);
我建议阅读更多文档以更好地了解该框架是否符合您的需求。不幸的是,文档有点零散,但如果您阅读 指南
标题下的子标题,您将获得很多有用的信息。