mongodb
- 非关系型数据库,又叫 nosql ,使用场景多是解决大规模数据集合多重数据种类
- 官网下载安装即可
- 如果安装文件目录中没有 data 文件夹,手动建一个 data 文件夹,data 下面再建一个 db 文件夹
- 为了可以在任一盘符下都可以启动,最好手动配置一下全局环境变量
- 服务端启动
- 终端中 输入指令 mongod --dbpath 安装路径 (D:\MongDB\bin)
- 客户端启动
- 终端中 输入指令 mongo
- 注意: 如果安装过程中报错,直接跳过,安装完成后,在安装目录终端中输入指令
- 删掉之前的服务:mongod --remove --serviceName "MongoDB"
- 新建服务:mongod --dbpath “D:\Program Files\MongoDB\data” --logpath “D:\Program Files\MongoDB\log\mongod.log” --install --serviceName “MongoDB” ,注意路径需要改
命令行操作指令
- 库操作
- 查看数据库:show dbs
- 创建数据库:use 数据库名称 ,没有这个数据库就创建,有就切换
- 删除数据库:db.dropDatabase() 删除当前数据库
- 集合操作
- 查看:show collections / db.getCollectionNames()
- 创建:**db.createCollection(‘集合名’, {配置})
- 删除:db.集合名.drop()
- 文档操作(每一条数据)
- 增加
db.集合.save({}) //添加一条
db.集合.insert({}) //添加一条
db.insertOne({}) //添加一条
db.集合.save([{},{}]) //多条
db.集合.insert([{},{}]) //多条
//insert 相同ID字段不会进行插入更改 save会覆盖插入
- 删除
db.集合.deleteOne({删除的条件}) //一条
db.集合.remove({删除条件},true) //一条
db.集合.remove({删除的条件}) //多条
db.集合.remove({}) //清空表
- 修改
db.集合.udpate({查询条件},{替换条件},插入boolean,全替换boolean)
//将所有的用户名为李四的年龄全都设置为20岁
db.user.update({username:"李四"},{$set:{age:20}},false,true)
第三个参数:如果更新的数据没有的话则插入,默认不插入
第四个参数:默认只更新一条数据,如果要批量更新设置true
- 查询
查所有:db.集合.find(查询条件)
查条数: db.集合.find().count()
去重:db.集合.distinct(key) // 返回数组,.length 可以获取长度
db.集合.find({查询条件},{age: 1,_id: 0}) // id 不显示,age 显示 1显示,0不显示
/*
查询条件:
{age: 22} age == 22
{age:{ $gt: 22 }} age > 22
{age:{ $lt: 22}} age < 22
{age:{ $gte: 22}} age>=22
{age:{ $lte: 22}} age<=22
{age:{ $lte: 122,$gte: 22}} age<=122 && age>=22
{$or:[{age: 22},{age: 122}]} 22 or 122
{key:value,key2:value2} value && value2
{name:/正则/}
替换条件:
{$set:{数据}}
{inc:{age:5}} //在原来的基础上年龄递增5
*/
- 排序
db.集合.find().sort({key:1,key2:-1}) // 可以按多个条件排序
db.集合.find().sort({key:-1}) //降
- 限定
db.集合.find().limit(number) //限定
db.集合.find().skip(number) //跳过
db.集合.findOne() //找第一个
db.集合.find().limit(1).skip(10) // 跳过 10 条,查询 1 条
node + mongodb 使用
- 安装、引入
// npm i mongodb -S
const mongodb = require('mongodb')
- 实例化并连接
let mongoCt = mongodb.MongoClient
// mongoCt.connect('协议://地址:端口',回调(err,client))
// err: 错误信息, client: 链接后的客户端
mongoCt.connect('mongodb://localhost:27017',(err, client) => {})
- 链接数据库 和 集合
let db = clicent.db('数据库名称')
let collect = db.collection('集合名称')
- 操作集合
- 增加数据
// 语法:collect.API()
// 增加数据
collect.insertOne(数据对象, (err, res) => {}) // 增加一条数据
collect.insertMany(arr数据, (err, res) => {}) // 增加多条数据
//res.result.n 结果 ok 状态
//res.ops 插入的内容 数组
//result.insertedId 插入后的id
- 删除数据
collect.deleteOne({删除条件}, (err, result) => {}) // 删除一条数据
collect.deleteMant({}, (err, result) => {}) // 删除多条数据
- 修改数据
collect.updateOne({条件}, {更新后}, (err, res) => {}) // 修改一条数据
collect.updateMany({条件}, {$set:{age: 24}}, (err, res) => {}) // 修改多条数据
- 查询数据
// 方法一:直接在回调函数里那结果, 返回值:对象 projection 中 key 为 1 表示显示
collect.find({条件},{skip:1,limit:1,projection:{key:1}},(err,result)=>{ result=>对象 })
// 方法二:返回结果直接 .toArray(err, res) 方法,转成 数组
collect.find({条件},{skip:1,limit:1,projection:{key:0}}).toArray((err,result)=>{ reulst=>arr })
- 排序
// 方法一:
collect.find().sort({key: -1}).toArray((err, res) => {})
// 方法二:
collet.find({查找条件}, {limit:5, sort: {key: 1}}).toArray((err, res) => {})
- 分页
collect.find({},{skip:5,limit:5}).toArray((err,result)=>{ reulst=>arr })
- 关闭数据库
client.close()
例子
// 引入 mongodb 模块
const mongodb = require('mongodb')
// 实例化并连接
let mongoCt = mongodb.MongoClient
mongoCt.connect('mongodb://localhost:27017', { useUnifiedTopology: true }, (err, client) => {
if(!err){
// 链接 数据库
let db = client.db('student') // 链接 student 数据库
// 链接 集合
let collect = db.collection('info') // 链接 info 集合
// 增加数据
collect.insertMany(
[
{username: "张三", age: 18, address: '江西九江'},
{username: '李四', age: 20, address: '江西南昌'},
{username: '王五', age: 16, address: '江西赣州'},
{username: '赵六', age: 25, address: '江西新余'},
{username: '麻子', age: 19, address: '福建泉州'},
{username: '二狗', age: 28, address: '福建厦门'},
{username: '愣子', age: 22, address: '福建福州'}
],
(err, result) => {}
)
// 删除数据
collect.deleteOne({username: '二狗'}, (err, result) => {
console.log(result)
})
// 修改数据
collect.updateOne(
{username: '愣子'},
{$set:{username: '二愣子', age: 24, address: '北京东城'}},
(err, result) => {
console.log(err)
})
// 查询数据(可以按条件查询,可以实现分页,排序等需求)
collect.find({}, {skip:1, limit: 5, sort:{age: -1}})
.toArray((err, res) => {
console.log(res)
// 关闭数据库连接
client.close()
})
}
})