介绍
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB服务端可运行在Linux、Windows平台,支持32位和64位应用,默认端口为27017。
推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
启动mongodb
点开mongodb的安装目录的bin文件目录
在此目录下打开cmd
输入mongod
再使用navicat进行连接
数据库命令
show dbs 显示所有数据库
切换到指定的数据库 如果数据库不存在则会自动创建
use locals
显示当前所在的数据库
db
删除当前数据库
db.dropDatabase()
集合命令
创建集合
db.createCollection('strArr')
显示当前数据库中的所有集合
show collections
删除某个集合
db.intArr.drop()
重命名集合
db.intArr.renameCollection('numberArr')
文档命令
查询文档
db.集合名.find(查询条件对象)
__id是 mongodb 自动生成的唯一编号 用来唯一标识文档
插入文档
db.集合名.insert(插入对象)
更新文档
db.集合名.update(查询条件对象,新的对象)
上面这种方式会直接用新的对象代替原有的对象数据,如果只想更新指定属性请用下面的方式
db.集合名.update(查询条件,{$set:{key:value}})
删除文档
db.集合名.remove(查询条件对象)
使用node.js连接mongodb
首先先在node中安装mongoose
npm i mongoose
//导入 mongoose
const mongo = require('mongoose')
//连接mongodb服务
mongo.connect('mongodb://127.0.0.1:27017/bilibili')
//设置回调
//设置成功的回调
mongo.connection.once('open', () => {
console.log('连接成功');
})
//设置失败回调
mongo.connection.on('error', () => {
console.log('连接失败');
})
//设置关闭回调
mongo.connection.on('close', () => {
console.log('连接关闭');
})
支持的字段类型
插入文档
//导入 mongoose
const mongo = require('mongoose')
//连接mongodb服务
mongo.connect('mongodb://127.0.0.1:27017/bilibili')
//设置回调
//设置成功的回调
mongo.connection.once('open', () => {
console.log('连接成功');
//创建文档的结构对象
//设置集合中文档的结构 属性以及属性值的类型 也就是指定这个文档要存的数据类型和结构
let bookSchema = mongo.Schema({
name: String,
author: String,
price: Number
});
//创建模型对象 对文档操作的封装对象
/**
* 参数说明
* @books: 文档名
* @bookSchema: 文档结构对象
*
*/
let booKModel = mongo.model('books', bookSchema);
console.log(booKModel);
//新增
booKModel.create({
name: '三国演义',
author: '罗贯中',
price: 29
})
})
//设置失败回调
mongo.connection.on('error', () => {
console.log('连接失败');
})
//设置关闭回调
mongo.connection.on('close', () => {
console.log('连接关闭');
})
有两条是因为之前有过一次测试
删除文档
先在库里面存入一些测试数据
单条删除
//批量删除
booKModel.deleteMany({
name: '西游记'
}).then((err, data) => {
if (err) {
console.log(err)
return;
}
console.log(data);
})
单个删除和批量删除结构一致,只是方法变为deleteOne
更新文档
批量更新
//批量修改
booKModel.updateMany({
name: '西游记'
}, { price: 999 }).then((err, data) => {
if (err) {
console.log(err)
return;
}
console.log(data);
})
单个更新和批量更新结构一致,只是方法变为updateOne
查询文档
//查询所有
booKModel.find().then((err, data) => {
if (err) {
console.log(err)
return;
}
console.log(data);
})
条件查询