Node中使用MongoDB
简介
MongoDB是一个介于关系数据库和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
Mongoose
在Node中可以使用 Mongoose库来连接数据库
mongoose中文文档
npm i mongoose -s
基础操作
连接数据库
const mongoose = require('mongoose');
//连接指定数据库
mongoose.connect(
'mongodb://ip地址/数据库名称',
{
useNewUrlParser: true,
useUnifiedTopology: true
}
);
const conn = mongoose.connection;
//绑定连接完成监听
conn.on('connected',function () {
console.log('数据库连接成功');
})
创建model
用Schema来定义数据对象的结构
通过 mongoose.model(表名,数据对象) 来定义model
//得到对应特定集合的model (文档:数据对象, 集合:数据表)
const Schema = mongoose.Schema;
const userSchema = new Schema({ //文档结构: 属性名\属性值
name: { type: String, default: 'hahaha' },
age: { type: Number, min: 18, index: true },
bio: { type: String, match: /[a-z]/ },
password: {type:String,select: false} //select: false 表示当返回对象时,不包含该属性
});
//定义Model
const UserModel = mongoose.model('user',userSchema);//创建了users集合
增删查改
通过上一步创建的Model来实现增删查改
相关的CRUD函数: https://mongoosejs.com/docs/queries.html
//增
function saveTest() {
//创建实例
const userModel = new UserModel({
username: 'admin',
age: 19,
bio:"z",
password:md5('12345') //利用 blueimp-md5库,将密码加密
});
userModel.save(function (err, data) {
console.log('save()',err,data);
})
}
//删
function deleteTest() {
UserModel.deleteOne(
{
_id: '5e4d1c324abf031e98915a65'
},(err, product) => {
console.log('delete ',err,product);
}
)
}
//查 通过find()/findOne()/findById
function findTest() {
UserModel.find(
(err,doc)=>{
console.log('find()',err,doc)
}
);
UserModel.findOne({username: 'admin'},
function (err,doc) {
console.log('findOne()',err,doc)
})
}
//改
function updateTest() {
UserModel.findByIdAndUpdate({
_id: '5e4d1c324abf031e98915a65'
},{
username: 'newName'
},
function (err,doc) {
console.log('findByIdAndUpdate',err,doc)
})
}
官方的条件查询例子
// With a JSON doc
Person.
find({
occupation: /host/,
'name.last': 'Ghost',
age: { $gt: 17, $lt: 66 },
likes: { $in: ['vaporizing', 'talking'] }
}).
limit(10).
sort({ occupation: -1 }).
select({ name: 1, occupation: 1 }).
exec(callback);
// Using query builder
Person.
find({ occupation: /host/ }). //模糊查询:正则表达式
where('name.last').equals('Ghost').
where('age').gt(17).lt(66).
where('likes').in(['vaporizing', 'talking']).
limit(10).
sort('-occupation').
select('name occupation').
exec(callback);
条件操作符:
$gt -------- greater than >$gte --------- gt equal >=
$lt -------- less than <
$lte --------- lt equal <=
$ne ----------- not equal !=
$eq -------- equal =
$in:[] 满足其中一个在该数组之内 其相反为 $nin
limit 读取指定数量的记录 skip 跳过指定数量的记录
升降排序 升序关键字:'asc' / 'ascending' / 1 降序关键字:'desc' / 'descending' / -1
// 以 "field" 升序 并且 "test" 降序
query.sort({ field: 'asc', test: -1 });
// 等同于
query.sort('field -test');select 用于包含和排除某些属性
// include a and b, exclude other fields
query.select('a b');
// exclude c and d, include other fields
query.select('-c -d');
Node中使用MongoDB的更多相关文章
- 在node中使用MongoDB
1.下载安装包,进行安装: https://www.mongodb.com/download-center/community 参考网址:https://www.cnblogs.com/ymwange ...
- nodejs中使用mongodb quickstart
nodejs中使用mongodb quickstart node 中使用mongodb的quick start.整理的官网crud简单例子. 在百度找了几篇帖子都有问题,所以直接看官网了. 连接Mon ...
- 详解node + mongoDb(mongoDb安装、运行,在node中连接、增删改查)
一.序言 好久没写博客了,这次主要聊聊 node 和 mongoDb . 先说明一下技术栈 node + express + mongoose + mongoDb.这篇博客,主要讲述 mongoDb ...
- Node.js向MongoDB中插入并查询数据
首先必须要保持Node.js与MongoDB保持连接 具体教程见:Node.js连接MongoDB数据库步骤 插入数据步骤如下 node项目文件如下:在routes文件夹下新建insert.js文件, ...
- MongoDB 在Node中的应用
转: MongoDB 在Node中的应用 文章目录 一 .什么是 MongoDB? 二.小Demo 三.Demo 增删改查 3.1 新增 3.2 查询 3.2.1 查询所有 [{},{}] 找不到返回 ...
- Node中的定时器详解
在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,node与javascript都具有将代码延迟一段时间的能力.在node中可以使用三种方式实现定时功能:超时 ...
- MongoDB学习(2)—Node.js与MongoDB的基本连接示例
前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务,在test数据库中插入一条实例数据: db. ...
- 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵 ...
- Node.js和MongoDB - MongoJS入门
第一次尝试翻译外国牛人的博文,希望大家喜欢. 本文源码详见:https://github.com/njaulj/mongojs 一点都不夸大的说,近年来node.js和mongodb的确是大放异彩,在 ...
随机推荐
- spring源码系列(一):使用Gradle构建spring5源码的一些坑和步骤
源代码github: https://github.com/spring-projects/spring-framework.git 一 修改项目配置文件中gradle版本和地址 替换成本地安装的版 ...
- ActiveMQ 快速入门教程系列 第二章 发布-订阅者模式实现
第二章我们会介绍怎样实现一个发布者对多个订阅者的消息传递 Topic和queue的最大区别在于topic是以广播的形式,通知所有在线监听的客户端有新的消息,没有监听的客户端将收不到消息:而queue则 ...
- Android Studio中Gradle sync failed
问题:Android Studio中更新同步Gradle 失败 Gradle sync failed: Could not find com.android.tools.build:gradle:3. ...
- 含源码解析,深入Java 线程池原理
从池化技术到底层实现,一篇文章带你贯通线程池技术. 1.池化技术简介 在系统开发过程中,我们经常会用到池化技术来减少系统消耗,提升系统性能. 在编程领域,比较典型的池化技术有: 线程池.连接池.内存池 ...
- 类加载之 <clinit>() 和 <init>()
前序文章:深入理解Java类加载 <clinit>() 与 <init>() 区别 一.<clinit>() Java 类加载的初始化过程中,编译器按语句在源文件中 ...
- css的选择器及它的种类特性?
今天主要说的是选择器的基础, 首先看,选择器的优先级:!important > 行间样式 > id选择器 > class 选择器 == 属性选择器 > 标签选择器 > 通 ...
- 练习2-14 求奇数分之一序列前N项和 (15 分)
练习2-14 求奇数分之一序列前N项和 (15 分) 本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行 ...
- Windows API 教程(九) 网络编程
茵蒂克丝 基础概念 ip 地址 服务端与客户端 Socket 基础概念 头文件和库文件 常用函数 WSAStartup ( ) 函数 WSACleanup ( ) 函数 Socket ( ) 函数 c ...
- [terminal]关于进度条的学习
在PowerShell中隐藏光标 在pip的源码C:\Python36\Lib\site-packages\pip\utils\ui.py中发现了: @contextlib.contextmanage ...
- throw throws区别
1.throws是在方法上对一个方法进行声明,而不进行处理,向上传,谁调用谁处理: 格式: 权限修饰符 返回值类型 方法名(参数列表) throws Exception1,Exception2...{ ...