Node.js使用mongoose操作mongodb
软件配置:
1.node v8.9.3
2. npm 5.5.1
3. mongoose及MongoDB版本见下package.json
// package.json
{
"name": "mongoosedemo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"mongodb": "^3.1.1",
"mongoose": "^5.2.4"
}
}
一、mongoose: Schema, Model, Entity
Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
Model : 由 Schema 发布生成的模型,具有抽象属性和行为的数据库操作
Entity : 由 Model 创建的实体,他的操作也会影响数据库
三者关系:
Schema 生成 Model,Model创造 Entity;
Model 和 Entity 都可对数据库操作造成影响,但 Model 比Entity 更具操作性。
二、 连接字符串
2.1 连接字符串
// db.js
const mongoose = require('mongoose');
const DB_URL = 'mongodb://localhost:27017/mydatabase1';
// 连接
mongoose.connect(DB_URL, { useNewUrlParser: true });
// 连接成功
mongoose.connection.on('connected', function () {
console.log('Mongoose connection open to ' + DB_URL);
})
// 连接异常
mongoose.connection.on('error', function (err) {
console.log('Mongoose connection error ' + err);
})
// 连接断开
mongoose.connection.on('disconnected', function () {
console.log('Mongoose connection disconnected ');
})
// 修改上面db.js 新增最后一行,导出mongoose对象
const mongoose = require('mongoose');
const DB_URL = 'mongodb://localhost:27017/mydatabase1';
// 连接
mongoose.connect(DB_URL, { useNewUrlParser: true });
// 连接成功
mongoose.connection.on('connected', function () {
console.log('Mongoose connection open to ' + DB_URL);
})
// 连接异常
mongoose.connection.on('error', function (err) {
console.log('Mongoose connection error ' + err);
})
// 连接断开
mongoose.connection.on('disconnected', function () {
console.log('Mongoose connection disconnected ');
})
module.exports = mongoose;
2.2 Schema
// 定义一个user的Schema,命名为user.js
/**
* 用户信息
*/
// 定义数据库表存储结构
const mongoose = require('./db');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: { type: String }, // 用户名
password: { type: String }, // 用户密码
age: { type: String }, // 用户年龄
lastLoinDate: { type: Date } // 最近登录一次时间
})
2.3 Model
定义好了Schema,接下就是生成Model。
model是由schema生成的模型,可以对数据库的操作
// 修改上面的user.js,将Schema转成Model,并导出
// user.js
/**
* 用户信息
*/
// 定义数据库表存储结构
const mongoose = require('./db');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: { type: String }, // 用户名
password: { type: String }, // 用户密码
age: { type: String }, // 用户年龄
lastLoinDate: { type: Date } // 最近登录一次时间
})
// 生成Model
module.exports = mongoose.model('User', UserSchema);
三、 CRUD操作
3.1 插入
Model#save([fn])
新建test.js
const User = require('./user');
// 插入
function insert() {
var user = new User({
username: "陈二狗", // 用户名
password: "abc123", // 用户密码
age: 18, // 用户年龄
lastLoinDate: new Date() // 最近登录一次时间
});
user.save(function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
insert();
node test.js
3.2 更新
Model.update(conditions, update, [options], [callback])
// test1.js
const User = require('./user');
// 更新
function update() {
var whereStr = {"username": "陈二狗"};
var updateStr = {"password": "123456"};
User.update(whereStr, updateStr, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
update();
node test1.js
常用方法还有 findByIdAndUpdate,这种比较有指定性,就是根据_id
Model.findByIdAndUpdate(id, [update], [options], [callback])
// test12.js
const User = require('./user');
// 根据ID更新
function findByIdAndUpdate() {
var id = "5b5333a114cf2d337c6bd971";
var updateStr = {"password": "aabbcc"};
User.findByIdAndUpdate(id, updateStr, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
findByIdAndUpdate();
其它更新方法
Model.findOneAndUpdate([conditions], [update], [options],[callback]) //找到一条记录并更新
3.3 删除
Model.remove(conditions, [callback])
// test2.js
const User = require('./user');
// 删除
function del() {
var whereStr = {"username": "陈二狗"};
User.remove(whereStr, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
del();
其它常用方法还有:
Model.findByIdAndRemove(id, [options], [callback])
Model.findOneAndRemove(conditions, [options], [callback])
3.4 条件查询
已先插入一些测试数据 。。
Model.find(conditions, [fields], [options], [callback])
const User = require('./user');
// 条件查询
function getByConditions() {
var whereStr = {"username": "陈二狗1"};
User.find(whereStr, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
getByConditions();
第2个参数可以设置要查询输出的字段,比如改成
const User = require('./user');
// 条件查询(设置第二个参数)
function getByConditions() {
var whereStr = {"username": "陈二狗1"};
var opt = {"username": 1, "_id": 0};
User.find(whereStr, opt, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
getByConditions();
输出只会有username字段,设置方法如上,1表示查询输出该字段,0表示不输出
3.4.1 查询年龄
const User = require('./user');
// 条件查询
function getByConditions() {
// var whereStr = {"username": "陈二狗1"};
// var opt = {"username": 1, "_id": 0};
// User.find(whereStr, opt, function (err, docs) {
// 查询年龄大于等20而且小于等于50岁
User.find({"age": {$gte: 20, $lte: 50 }}, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
getByConditions();
3.4.2
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
3.5 数量查询
Model.count(conditions, [callback])
const User = require('./user');
// 数量查询
function getCountByConditions() {
var whereStr = {};
// User.count(whereStr, function (err, docs) {
User.countDocuments(whereStr, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
getCountByConditions();
修改后:
3.6 根据_id查询
Model.findById(id, [fields], [options], [callback])
const User = require('./user');
// 根据_id查询
function getById () {
var id = "5b536b314cfb3f0d54a53d37"
User.findById(id, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
getById ();
3.7 模糊查询
新增部分数据
const User = require('./user');
// 模糊查询
// 查询出所有用户名中有'm'的名字,且不区分大小写
function getByRegex () {
var whereStr = {"username": {$regex: /m/i}};
User.find(whereStr, function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
getByRegex ();
3.8 分页查询
const User = require('./user');
// 分页查询
function getByPager () {
var pageSize = 5; // 一页多少条
var currentPage = 1; // 当前第几页
var sort = {'lastLoinDate': -1}; // 按登录时间倒序排
var condition = {};
var skipnum = (currentPage - 1) * pageSize; // 跳过数
User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec(function (err, docs) {
if(err) {
console.log("Error: " + err);
} else {
console.log("docs: " + docs);
}
})
}
getByPager ();
currentPage = 1的时候
currentPage = 2的时候
3.9 其它常用方法
Model.distinct(field, [conditions], [callback]) //去重
Model.findOne(conditions, [fields], [options], [callback]) //查找一条记录
Model.findOneAndRemove(conditions, [options], [callback]) //查找一条记录并删除
Model.findOneAndUpdate([conditions], [update], [options], [callback]) //查找一条记录并更新
相关代码下载
注:
mongoose中所有回调函数都是function(err,docs)的这种形式,err是报错,docs是返回对象(或查询筛选之后)的结果
实例方法需要new才能使用(如save),静态方法在Model层即可使用(如find()、findOne()方法)
mongodb学习(3)— NodeJs使用mongoose操作mongodb
mongoosejs
mongoose学习笔记2015-7-24
Mongoose学习参考文档——基础篇
Mongoose学习参考文档——基础篇
超详细的数据库mongoose的使用方法/教程
极客学院
————————————————
版权声明:本文为CSDN博主「林飞的梦呓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_25479327/article/details/81148772
Node.js使用mongoose操作mongodb相关推荐
- 如何使用Node.js,Express和MongoDB设置GraphQL服务器
by Leonardo Maldonado 莱昂纳多·马尔多纳多(Leonardo Maldonado) 如何使用Node.js,Express和MongoDB设置GraphQL服务器 (How to ...
- node.js连接MySQL操作及注意事项
node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是nod ...
- nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客
GitHub: https://github.com/nswbmw/N-blog N-blog 使用 Express + MongoDB 搭建多人博客 开发环境 Node.js: 6.9.1 Mong ...
- Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)
文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...
- Mongodb 数据库基本操作语句,结合 Node.js + express + mongoose (实现增、删、改、查,批量增加、修改等,创建临时表,多表查询......)
版本说明 "MongoDB": "4.0.9", // cmd命令窗输入:mongo --version "node": 10.13.0, ...
- MongoDB和Node.js的Mongoose简介
Mongoose是一个JavaScript框架,通常在带有MongoDB数据库的Node.js应用程序中使用. 在本文中,我将向您介绍Mongoose和MongoDB,更重要的是,这些技术适合您的应用 ...
- 梦幻西游手游炼药信息采集系统(Node.js+Express+Bower+Bootstrap+Mongodb+Mongoose)
梦幻西游手游炼药信息采集系统 一.初衷 本文不是软文!!!本文不是软文!!!本文不是软文!!!文章开始重要的事情说三遍!!! 初中时玩一款网易的游戏叫<梦幻西游>,前两天看朋友在玩< ...
- Node.js 常用Mongoose方法
Node.js 手册查询-Mongoose 方法 一.Schema 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力.可以说是数据属性模型(传统意义的表结构 ...
- node.js 基础(含mongodb,express,express-art-template)
node.js入门笔记 文章目录 1.Node.js 1.1 JavaScript开发弊端 1.2 node.js模块化开发规范 1.3 module.exports和exports 2.系统模块 2 ...
最新文章
- cordova项目怎样修改版本号
- 使用SAP PI将CRM的Opportunity同步到C4C去
- linux应用与管理,Linux操作系统应用与管理
- 真实AIS数据,解码,可视化
- 4步教你玩转可视化大屏设计|内附实际操作
- Python--Json数据简单解析(11.18)
- Java Socket缓冲区
- nginx/windows: nginx多虚拟主机配置
- shell脚本实现从master节点批量配置salve节点(主机名有瑕疵,IP映射,ssh服务)
- win10便签常驻桌面_有没有比较好用的电脑桌面待办事项软件?桌面便签可以了解一下...
- 项目如行军——《孙子兵法》之九地篇
- OTP动态密码_Java代码实现
- django 改端口_django更改默认的runserver端口
- 删除win7资源管理器左侧家庭组/导航窗口的收藏夹、库、家庭组以及网络的方法
- Scratch模拟题(二级)_1
- Simulink三相异步电机仿真(1)
- grub2详解(翻译和整理官方手册)
- 登录提示 ORA-28000 The account is locked.
- 全国计算机等级考试考务工作安排,2015年42次全国计算机等级考试考务工作安排(3月20日修改)(1)...
- 使你的ActiveX控件执行时不弹出安全性提示