mongoose

一、简介

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()
  • 作用








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值