Are*_* Li 6 mongoose mongodb node.js express mongoose-schema
考虑一个非常简单的Express 4应用程序结构:
-- app.js
-- models
|--db.js
|--news.js
Run Code Online (Sandbox Code Playgroud)
其中news.js包含猫鼬模式和基于该模式的模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var newsSchema = new Schema({
title: String,
subtitle: String,
// other fields...
});
var News = mongoose.model('News', newsSchema);
Run Code Online (Sandbox Code Playgroud)
据我了解,为了app.js使用News模式,它有权要求这样的脚本中的文件:require('./models/news')。此外,news.js还必须像这样导出模型:module.exports = News;。
但是,我遇到了许多脚本,它们不会导出在单独文件中定义的模型(或任何与此相关的内容),而仅通过要求模型文件和然后做这样的事情:
var mongoose = require('mongoose');
var News = mongoose.model('News');
Run Code Online (Sandbox Code Playgroud)
这怎么可能?这是猫鼬的特色吗?如果未在另一个文件中导出模型/模式,文件如何使用该文件中定义的模型或架构?
这最终有效,因为当您调用require('mongoose')各种文件时,您会返回相同的对象。换句话说:在您的情况下,它在app.js和之间共享news.js。
当您创建新模型(使用mongoose.Model('Name', schema))时,Mongoose 将该模型实例存储在模型的内部列表中。
这也允许您通过名称获取实例,使用mongoose.Model('Name'). Mongoose 将在其内部列表中查找该模型,并将其返回。