来自猫鼬主页:
Mongoose 提供了一种直接的、基于模式的解决方案
建模您的应用程序数据并包括内置类型转换,
验证、查询构建、业务逻辑挂钩等等
盒子。
Mongoose 无法从可能唯一的文档集合中推断出架构。 MongoDB 不会对存储在集合中的文档强制执行模式。
因此,Mongoose 在 NodeJS 原生驱动程序 (here) 上添加了一层,许多人认为它更有效率。使用 Node.JS 时,不需要与 MongoDB 一起使用。
Mongoose 从根本上需要两件事才能工作:
- Schema == 这定义了文档结构 (reference)。您可以添加validation,新方法,添加虚拟属性,使用data types,建立references到其他集合(模型)。
- Model == 这是在运行时用于表达对集合的查询的类 (reference)。 Schema 定义用于构建模型。
因此,正如您在粘贴的示例中看到的那样,定义了一只小猫 Schema,然后创建了一个 Model Kitten。使用模式和模型的好处是 Mongoose 然后强制执行可用的属性/字段。
您只需在应用程序中定义一次Schemas 和Models。因此,通常在应用程序启动时,您需要执行代码来定义它们,然后在整个应用程序生命周期中根据需要使用 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 标题的子标题,您将获得很多有用的信息。