mongoose

来源:互联网 发布:神奇的化学元素 mac 编辑:程序博客网 时间:2024/06/05 20:00

一、简介

1. mongoose是什么?

mongoose是基于node.js、 异步环境中工作的MongoDB对象建模工具

mongoose是操作mongoDB数据的工具

2. mongoose支持

  • 堆栈溢出
  • 错误报告
  • mongoose荣冗余通道
  • mongoDB支持
二、mongoose的安装
1. mongoose安装前
在安装mongoose模块前,需要先安装node.js(mongoose基于node.js)和mongoDB数据库

2.通过命令行工具进行mongoose模块的安装
$ npm install mongoose --save

三、mongoose的入门
1. 引入mongoose模块
var mongoose = require('mongoose');/*在node.js的项目中引入模块的语法一样*/

2. 连接数据库
  • 应用程序只使用一个数据库
mongoose.connect('mongodb:数据库路径');
如:连接本地的test数据库
mongoose.connect('mongodb: //localhost/test');
  • 应用程序创建额外数据库连接(需要创建多个数据库连接)
mongoose.createconnection(mongodb: //url 或 参数[ 主机(host)、数据库(database)、端口(port) ])
如:连接本地的my_database数据库, 端口号为3000
mongoose.createconnection(' mongodb: //127.0.0.1/my_database:3000 ')

注意:
如果本地连接数据库失败,可以尝试用127.0.0.1代替localhost。

mongoose.connect与mongoose.connection的区别
对于初学者,可能会觉得这里有点懵。那让我们一起理解一下。
  • mongoose.connect('URL')只是设置需要连接的数据库 URL,如需连接数据库,则需要进行mongoose.connection;并返回connection 连接数据库的对象实例;
  • mongoose.createconnection(''URL),设置需要连接的数据库URL,且包含了mongoose.connection这一步操作(连接数据库),并返回connection 连接数据库的对象实例;
  • 连接单个数据库,mongoose.connect('URL')和mongoose.connection两步操作就相当于 mongoose.connection('URL')一步操作;
  • 注意,由于mongoose.connection('URL')有返回值,且返回值为connection对象实例,故mongoose.connection(‘URL’)可用于创建多个连接数据库的对象实例,连接多个数据库。
  • 两种连接数据库的对比:
mongoose.connect('URL'):
var mongoose = require('mongoose');db = mongoose.createConnection('localhost', 'test');
db1 = mongoose.createConnection('localhost', 'test');
db2 = mongoose.createConnection('localhost', 'my_database');
mongoose.connection('URL')
var mongoose = require('mongoose');mongoose.connect('mongodb://localhost/test');/*设置需要连接的数据库URL*/db = mongoose.connection;/*连接 test数据库,并返回对象实例*/db.on('error', 
  // 连接 test数据库 失败!
console.error.bind(console, 'connection error:'))
.once('open', function callback () {
// 成功连接 test数据库!});

3.定义模式
Models(模式)是通过Schema接口定义;mongoose的所有一切都来源于Schema。
语法如下:
var mongoose = require('mongose');
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var DemoSchema = new Schema({
name: String,
age: Number,
date: Date
}); /*定义模式字段的类型*/

4.编译模式(将模式编译为模型)
通过Model接口将Schema定义的模式编译为模型
语法:
mongoose.model('名称', 通过Schema接口定义的模式实例对象);
实例:
var Demo = mongoose.model('Demo', DemoSchema);
5.mongoose的三大概念
  • Schemas
通过Schema定义的数据模式
  • models
数据模型 -- 通过model接口,将Schema定义的数据模式编译为数据模型的构造函数
  • documents
数据文档 -- 是数据模型构造函数的一个实例

四、Schema接口
1. Schema接口的作用
mongoose的一切皆始于Schema
Schema接口用于定义模式

2. 允许的SchemaTypes(类型)
  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array
3.定义模式
var mongoose = require('mongoose');var Schema = mongoose.Schema;var blogSchema = new Schema({  title:  String,  author: String, body:   String,  comments: [{ body: String, date: Date }], date: { type: Date, default: Date.now },  hidden: Boolean,  meta: {       votes: Number,       favs:  Number  }});

注意:如果定义完成后,还需要额外添加属性/keys可通过Schema接口的add方法进行添加
4. Schema.add()
  • 作用
添加key关键字段
  • 语法
Schema.add(obj, prefix)
  • 参数
obj: <Object>/*key键名称(属性)*/
prefix: <String>  /*key键值的类型 (属性值的数据类型)*/
  • 实例
var ToySchema = new Schema;ToySchema.add({ name: 'string', color: 'string', price: 'number' });

5. Schema.eachPath()
  • 作用
迭代模式的paths,类似数组迭代
  • 语法
Schema.eachPath(fn)
  • 参数
fn: <Function> /*返回函数*/
每次迭代中,回调函数通过设置pathname和schemaType作为参数迭代
  • 返回值
Schema接口对象(即 this)
  • 实例

6.Schema.get()
  • 作用
获取模式的选项
  • 语法
Schema.get(key)
  • 参数
key: <String> /*选项名*/
  • 实例

7.Schema.index()
  • 作用








原创粉丝点击