Mongodb(文档数据库)的安装与使用(文档的增删改查)
1.数据库的简单介绍以及图形化使用
数据库是存放数据的仓库,之前项目中的列表数据都是在服务器项目里面用json做持久化处理,存储在了磁盘中,然后用express框架自带的fs模块去操作文件读取和更新里面的内容,现在学数据库是专门帮助我们存放数据的一个服务器。
首先数据库包括关系数据库比如mysql和非关系数据库mongoDB文档数据库。not onlt mysql。首先安装步骤去官网下载社区版,然后我安装到了/usr/local目录,然后在终端输入open .bash-profile暴露我们安装的文件路径,然后source .bash-profile启用暴露环境变量,然后就可以mongod --version查看安装好的版本,这里要brew install mongosh安装一个启动客户端的依赖,方便我们用这个命令启动数据库客户端。自动绑定数据库的服务器,可以增删改查服务器中的数据。
mongod --fork --dbpath data --logpath log/mongo.log --logappend
后台启动mongod服务器,数据存放路径和控制台日志路径 --port指定服务器端口号 默认27017
这样现在我们开启了一个客户端而且绑定了服务器,可以对数据进行增删改查,比如输入show databases查看当前的数据库
但是这样很不方便所以我们下载一个gui可视化操作界面,安装app启动之后输入客户端对应的地址这里是localhost:27017绑定服务器就可以了。
这样就可以在shell中进行数据的增删改查了。
2.mongodb数据增删改查命令
我们在可视化app的MongoDB shell终端练习。
1.插入
/*
像数据库中插入文档db.<collection>.insertOne/Many({})向集合中插入一个或者多个文档当我们插入文档时 如果没有指定_id属性则数据库会自动为文档添加_id作为文档的唯一标识
*/
ObjectId()
ObjectId('68a2d36fbfb03bf43f69f144')
db.stus.insertOne({_id:'hello',name:'猪八戒',age:28,gender:"男"})
{acknowledged: true,insertedId: 'hello'
}
db.stus.find()
{_id: ObjectId('68a2a5feddbbb4d84e35173d'),name: 'wangdefa',wangba: ''
}
{_id: ObjectId('68a2a7cc674492ed16f720d9'),name: 'lichenyang'
}
{_id: ObjectId('68a2d2a8bfb03bf43f69f13f'),name: '猪八戒',age: 28,gender: '男'
}
{_id: ObjectId('68a2d2ddbfb03bf43f69f140'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f141'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f142'),name: '豆芽',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f143'),name: '西瓜',age: 99,gender: '女'
}
{_id: 'hello',name: '猪八戒',age: 28,gender: '男'
}
2.查询
/*查询db.collection.find()find()用来查询集合中所有符合条件的文档find()中可以接受对象作为条件参数{}表示查询所有的文档
*/
db.stus.find({_id:'hello'})
{_id: 'hello',name: '猪八戒',age: 28,gender: '男'
}
db.stus.find({age:99)
SyntaxError: Unexpected token, expected "," (1:20)
> 1 | db.stus.find({age:99)| ^
db.stus.find({age:99})
{_id: ObjectId('68a2d2ddbfb03bf43f69f140'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f141'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f142'),name: '豆芽',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f143'),name: '西瓜',age: 99,gender: '女'
}
db.stus.find({age:99,name:'黄瓜'})
{_id: ObjectId('68a2d2ddbfb03bf43f69f140'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f141'),name: '黄瓜',age: 99,gender: '女'
}
db.stus.findOne({age:99,name:'黄瓜'})
{_id: ObjectId('68a2d2ddbfb03bf43f69f140'),name: '黄瓜',age: 99,gender: '女'
}
db.stus.find({}).length()
TypeError: db.stus.find({}).length is not a function
db.stus.find({}).Count()
TypeError: db.stus.find({}).Count is not a function
db.stus.find({}).count()
8
db.stus.find({}).length()
TypeError: db.stus.find({}).length is not a function
db.stus.find({})
{_id: ObjectId('68a2a5feddbbb4d84e35173d'),name: 'wangdefa',wangba: ''
}
{_id: ObjectId('68a2a7cc674492ed16f720d9'),name: 'lichenyang'
}
{_id: ObjectId('68a2d2a8bfb03bf43f69f13f'),name: '猪八戒',age: 28,gender: '男'
}
{_id: ObjectId('68a2d2ddbfb03bf43f69f140'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f141'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f142'),name: '豆芽',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f143'),name: '西瓜',age: 99,gender: '女'
}
{_id: 'hello',name: '猪八戒',age: 28,gender: '男'
}
3.更新
db.stus.updateOne({name:'猪八戒'},{age:199})
MongoInvalidArgumentError: Update document requires atomic operators
db.stus.updateOne({ name: '猪八戒' },{ $set: { age: 199 } }
)
{acknowledged: true,insertedId: null,matchedCount: 1,modifiedCount: 1,upsertedCount: 0
}
db.stus.find({})
{_id: ObjectId('68a2a5feddbbb4d84e35173d'),name: 'wangdefa',wangba: ''
}
{_id: ObjectId('68a2a7cc674492ed16f720d9'),name: 'lichenyang'
}
{_id: ObjectId('68a2d2a8bfb03bf43f69f13f'),name: '猪八戒',age: 199,gender: '男'
}
{_id: ObjectId('68a2d2ddbfb03bf43f69f140'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f141'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f142'),name: '豆芽',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f143'),name: '西瓜',age: 99,gender: '女'
}
{_id: 'hello',name: '猪八戒',age: 28,gender: '男'
}
db.stus.update({ name: '猪八戒' },{ age: 199 }
)
DeprecationWarning: Collection.update() is deprecated. Use updateOne, updateMany, or bulkWrite.
MongoInvalidArgumentError: Update document requires atomic operators
db.stus.updateOne({ name: '猪八戒' },{ $unset{ gender:'' } }
)
SyntaxError: Unexpected token, expected "," (3:10)1 | db.stus.updateOne(2 | { name: '猪八戒' },
> 3 | { $unset{ gender:'' } }| ^4 | )
db.stus.updateOne({ name: '猪八戒' },{ $unset{ gender:'' } }
)
SyntaxError: Unexpected token, expected "," (3:10)1 | db.stus.updateOne(2 | { name: '猪八戒' },
> 3 | { $unset{ gender:'' } }| ^4 | )
db.stus.updateOne({ name: '猪八戒' },{ $unset:{ gender:'' } }
)
{acknowledged: true,insertedId: null,matchedCount: 1,modifiedCount: 1,upsertedCount: 0
}
db.stus.find({})
{_id: ObjectId('68a2a5feddbbb4d84e35173d'),name: 'wangdefa',wangba: ''
}
{_id: ObjectId('68a2a7cc674492ed16f720d9'),name: 'lichenyang'
}
{_id: ObjectId('68a2d2a8bfb03bf43f69f13f'),name: '猪八戒',age: 199
}
{_id: ObjectId('68a2d2ddbfb03bf43f69f140'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f141'),name: '黄瓜',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f142'),name: '豆芽',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f143'),name: '西瓜',age: 99,gender: '女'
}
{_id: 'hello',name: '猪八戒',age: 28,gender: '男'
}
db.stus.updateMany({ name: '黄瓜' },{ $unset:{ gender:'' } }
)
{acknowledged: true,insertedId: null,matchedCount: 2,modifiedCount: 2,upsertedCount: 0
}
db.stus.find({})
{_id: ObjectId('68a2a5feddbbb4d84e35173d'),name: 'wangdefa',wangba: ''
}
{_id: ObjectId('68a2a7cc674492ed16f720d9'),name: 'lichenyang'
}
{_id: ObjectId('68a2d2a8bfb03bf43f69f13f'),name: '猪八戒',age: 199
}
{_id: ObjectId('68a2d2ddbfb03bf43f69f140'),name: '黄瓜',age: 99
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f141'),name: '黄瓜',age: 99
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f142'),name: '豆芽',age: 99,gender: '女'
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f143'),name: '西瓜',age: 99,gender: '女'
}
{_id: 'hello',name: '猪八戒',age: 28,gender: '男'
}
4.删除
db.stus.remove({_id:'hello'})
DeprecationWarning: Collection.remove() is deprecated. Use deleteOne, deleteMany, findOneAndDelete, or bulkWrite.
{acknowledged: true,deletedCount: 1
}
db.stus.remove({ name: '黄瓜' },
)
{acknowledged: true,deletedCount: 2
}
db.stus.find({})
{_id: ObjectId('68a2a5feddbbb4d84e35173d'),name: 'wangdefa',wangba: ''
}
{_id: ObjectId('68a2a7cc674492ed16f720d9'),name: 'lichenyang'
}
{_id: ObjectId('68a2d2a8bfb03bf43f69f13f'),name: '猪八戒',age: 199
}
{_id: ObjectId('68a2d2f0bfb03bf43f69f142'),name: '豆芽',age: 99,gender: '女'
}
增删改查注意点,插入会自动添加-id作为唯一标识符,更新和删除都需要一个接收对象作为参数判断更新或者删除哪一个集合中的文档,查询返回的不是数组是一个游标对象,需要转化为数组才能用length方法去查看当前数据库中有多少集合