MongoDB学习day07--mongoose入门,数据库增删改查,默认参数,模块化
一、mongoose介绍
Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。 Mongoose
是 NodeJS 的驱动, 不能作为其他语言的驱动。
Mongoose 有两个特点:
1、 通过关系型数据库的思想来设计非关系型数据库
2、 基于 mongodb 驱动, 简化操作
二、mongoose的安装以及使用
1.安装
npm/cnpm mongoose --save
2.引入mongoose并连接数据库
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
如果有账户密码需要采用下面的连接方式:
mongoose.connect('mongodb://eggadmin:123456@localhost:27017/eggcms');
3.定义Schema
数据库中的 Schema, 为数据库对象的集合。 schema 是 mongoose 里会用到的一种数据模式,
可以理解为表结构的定义; 每个 schema 会映射到 mongodb 中的一个 collection, 它不具备
操作数据库的能力
var UserSchema=mongoose.Schema({
name: String,
age:Number,
status:'number'
})
4.创建数据模型
model 是由 schema 生成的模型, 可以对数据库的操作。
注意: mongoose.model 里面可以传入两个参数也可以传入三个参数
mongoose.model(参数 1:模型名称(首字母大写) , 参数 2:Schema)
传两个参数,默认会和模型名称相同的复数的集合建立连接,例如模型名称为"User",则会默认操作users这个集合
var User=mongoose.model('User', UserSchema);
mongoose.model(参数 1:模型名称(首字母大写) , 参数 2:Schema, 参数 3:数据库集合名称)
传三个参数,会和第三个参数的集合建立连接,操作第三个参数的集合
var User=mongoose.model('User', UserSchema,'users');
5.查找数据
User.find({},function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
6.增加数据
var u=new User({ //实例化模型 传入增加的数据
name:'lisi2222333',
age:20,
status:true
})
u.save(function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
7.修改数据
User.updateOne({ name: 'lisi2222' }, { name: '哈哈哈' }, function(err, res) {
if(err){
console.log(err);
return;
}
console.log('成功')
});
8.删除数据
User.deleteOne({ _id: '5b72ada84e284f0acc8d318a' }, function (err) {
if (err) {
console.log(err);
return;
}
// deleted at most one tank document
console.log('成功');
});
9.保存成功查找
var u=new User({
name:'lisi2222333',
age:20,
status:true //类型转换
})
u.save(function(err,docs){
if(err){
console.log(err);
return;
}
//console.log(docs);
User.find({},function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
});
三、默认参数
在定义schema时,设置默认参数
var UserSchema=mongoose.Schema({
name:String,
age:Number,
status:{
type:Number,
default:1 //默认为1
}
})
四、模块化
1.先创建数据库连接模块moongoose
//连接数据库
var mongoose=require('mongoose');
//useNewUrlParser这个属性会在url里识别验证用户所需的db,未升级前是不需要指定的,升级到一定要指定。
mongoose.connect('mongodb://127.0.0.1:27017/eggcms',{ useNewUrlParser: true },function(err){
if(err){
console.log(err);
return;
}
console.log('数据库连接成功')
});
module.exports=mongoose; //输出mongoose
2.创建user模块
var mongoose=require('./db.js');
var UserSchema=mongoose.Schema({
name:String,
age:Number,
status:{
type:Number,
default:1
}
})
module.exports=mongoose.model('User',UserSchema,'user');
3.创建news模块
var mongoose=require('./db.js');
var NewsSchema=mongoose.Schema({
title:"string",
author:String,
pic:String,
content:String,
status:{
type:Number,
default:1
}
})
module.exports=mongoose.model('News',NewsSchema,'news');
4.使用模块
var UserModel=require('./model/user.js');
var NewsModel=require('./model/news.js');
var user=new UserModel({
name:"李四666",
age:40
})
user.save(function(err){
if(err){
console.log(err);
return;
}
//获取user表的数据
UserModel.find({},function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
})
// NewsModel.find({},function(err,docs){
// if(err){
// console.log(err);
// return;
// }
// console.log(docs);
// })
五、模块性能
多个模块,不会多次连接数据库,只会在引入第一个模块时连接数据库
可以通过以下代码测试
console.time('user');
var UserModel=require('./model/user.js');
console.timeEnd('user');
console.time('news');
var NewsModel=require('./model/news.js');
console.timeEnd('news');
结果是:第一次时间大于第二次
MongoDB学习day07--mongoose入门,数据库增删改查,默认参数,模块化的更多相关文章
- MongoDB学习总结(二) —— 基本操作命令(增删改查)
上一篇介绍了MongoDB在Windows平台下的安装,这一篇介绍一下MongoDB的一些基本操作命令. 下面我们直奔主题,用简单的实例依次介绍一下. > 查看所有数据库 (show dbs) ...
- 2. MongoDB基本操作 —— 用Mongo.exe操作数据库增删改查
一.开篇 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象 ...
- mongodb 数据库 增删改查
mongodb 数据库 增删改查 增: // 引入express 模块 var express = require('express'); // 路由var router = expr ...
- Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1.首先项目图: 2.这里的布局文件activity_main.xml: <LinearLayout xmlns:android ...
- 数据库学习之数据库增删改查(另外解决Mysql在linux下不能插入中文的问题)(二)
数据库增删改查 增加 首先我们创建一个数据库user,然后创建一张表employee create table employee( id int primary key auto_increment, ...
- Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...
- (转)SQLite数据库增删改查操作
原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...
- Yii2.0高级框架数据库增删改查的一些操作
yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
随机推荐
- uva10735 Euler Circuit
题外话:很多混合图问题可以转化为有向图问题(将无向边拆为两条有向边) 本题不行,因为只能经过一次 这种问题能想到网络流.. 复习欧拉回路:入度==出度 和uva1380有点相似,要先给无向边定向.原图 ...
- 关于sigleton模式
单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中 ...
- 1.入手树莓派之linux环境搭建
最近刚刚买了一款 树莓派3代B型 raspberrypi 板载蓝牙和WIFI 英国版本,没玩过,觉得很好奇,生怕记性不好哈,把自己玩的过程记录一下,以备不时之需: 需要材料: 1) 树莓派: 2)sd ...
- Report Builder 打开报错
提示:REP-0756:警告:找不到PL/SQL程序库’inv.pll’. 解决办法 处理:1.运行 ---输入REgedit ,在注册表内,查找注册表项Reports_path. 2.将下载的.pl ...
- Openjudge-4110-圣诞老人的礼物
这一题是一道贪心的题目,但是它比较特殊的地方在于糖果可以分开拿,我们不必整箱拿,所以我们可以直接就把糖果按照价值比从大到小排序,然后整箱装不下的时候,剩余重量乘以它的价值比,这样就算出来了. 对于结构 ...
- mysql5.7配置
my3306.cnf [client] port = 3306 #端口socket = /data/mysql3306/mysql3306.sock #mysql以socket方式运行的soc ...
- linux破解root登录密码,并重置
重启系统后按'e'键,进入编辑模式,在'UTF -8'后空格输入'rd.break'后,按快捷键'Ctrl+X'进入新界面进行编辑,代码如下: switch_root:/# mount -o remo ...
- docker:安装tomcat
文章来源:http://www.cnblogs.com/hello-tl/p/8929879.html 0.下载镜像 # docker pull tomcat:8.5 1.复制tomcat配置 先启动 ...
- 【实验吧】转瞬即逝write up
---恢复内容开始--- 虽然这是很简单的一道题,但这是我第一次拿着题有很清晰的思路,并且脚本也有思路写,拿到文件用ida打开,分析main函数: int __cdecl main(int argc, ...
- 《C/C++工程师综合练习卷》
前言 前天拿这个<C/C++工程师综合练习卷>练习了一下,现将错题以及精题分析总结. 错题分析与总结 2 . 下面的程序可以从1-.n中随机等概率的输出m个不重复的数.这里我们假设n远大于 ...