我是否理解正确,如果我想查询集合,我必须执行以下操作:
var mongoose = require("mongoose");
mongoose.connect();
var db = mongoose.connection;
db.on('open', function callback () {
var kittySchema = mongoose.Schema({
name: String
})
var Kitten = mongoose.model('Kitten', kittySchema)
Kitten.find(function (err, kittens) {
console.log(kittens);
})
});
Run Code Online (Sandbox Code Playgroud)
我是否必须每次都指定架构,即使已经有一组小猫?
为什么我不能做类似的事情db.Kittens.find()?
Wir*_*rie 31
来自Mongoose主页:
Mongoose提供了一个直接的,基于模式的解决方案来建模您的应用程序数据,并包括内置的类型转换,验证,查询构建,业务逻辑钩子等,开箱即用.
Mongoose无法从一组潜在的独特文档中推断出一个模式.MongoDB不会对存储在集合中的文档强制执行架构.
因此,Mongoose在NodeJS本机驱动程序(此处)上添加了一个层,许多人发现它更有效率.使用Node.JS时,不要求使用MongoDB.
Mongoose需要从根本上解决两件事:
因此,正如您在粘贴的示例中看到的那样,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 ...
});
});
Run Code Online (Sandbox Code Playgroud)
而不是简单:
Kitten.find(function(err, kittens) {
});
Run Code Online (Sandbox Code Playgroud)
另外,使用Mongoose时,您可能会发现编写更复杂的查询更容易编写和阅读:
Kitten.find().where('name', 'Harold').exec(/*callback*/);
Run Code Online (Sandbox Code Playgroud)
我建议阅读更多文档,以更好地了解框架,以及它是否适合您的需求.遗憾的是,文档有点分散,但如果您浏览标题的子标题Guide,您将获得大量有用的信息.
尝试这个..
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ProductSchema = new Schema({}, { strict: false });
const Product = mongoose.model('Product', ProductSchema, 'products');
module.exports = { Product };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31253 次 |
| 最近记录: |