一、MongoDB的简单安装(单机版测试用)
下载地址:https://www.mongodb.com/try/download/community
下载版本,我选用:4.4.22(中间数字为奇数:开发版,中间数字为偶数:稳定版)
1、下载安装包:
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.22.tgz
2、解压文件并重命名:
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.22.tgz -C /opt/module/ cd /opt/module/ mv mongodb-linux-x86_64-rhel70-4.4.22/ mongodb/
3、创建dbpath和logpath
mkdir -p /mongodb/data /mongodb/log
4、在mongodb目录中启动mongodb server:
[root@master mongodb]# bin/mongod --port=27017 --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --bind_ip=0.0.0.0 --fork about to fork child process, waiting until server is ready for connections. forked process: 166069 child process started successfully, parent exiting
5、添加环境变量,方便执行mongodb命令,修改/etc/profile:
export MONGODB_HOME=/opt/module/mongodb export PATH=$PATH:$MONGODB_HOME/bin ## source /etc/profile
6、停止mongodb:
mongod --port=27017 --dbpath=/mongodb/data --shutdown
二、MongoDD的简单使用
1、连接MongoDB:
mongo --host=localhost --port=27017 ## 本机时 host/port 可缺省 # 退出命令行 Ctrl + C
2、查看所有数据库列表:
> show dbs; admin 0.000GB config 0.000GB local 0.000GB ## admin: 从权限角度考虑, 这是 root 数据库, 如果将一个用户添加到这个数据库, 这个用户自动继承所有数据库的权限, 一些特定的服务器端命令也只能从这个数据库运行, 比如列出所有的数据库或者关闭服务器 ## local: 数据永远不会被复制, 可以用来存储限于本地的单台服务器的集合 (部署集群, 分片等) ## config: Mongo 用于分片设置时, config 数据库在内部使用, 用来保存分片的相关信息
3、数据库的基本操作(db = database):
# 直接use即可创建数据库 > use article switched to db article ## 查看当前数据库 > db article ### 但是此时show dbs命令却是没有article这个库的 > show dbs admin 0.000GB config 0.000GB local 0.000GB #### 删除数据库 > db.dropDatabase() { "ok" : 1 }
原因是:MongoDB存储分为“内存”+“磁盘”2部分,当use一个数据库,而这个数据库还是空数据库的时候,是在内存中的,此时还没有持久化到磁盘;而show dbs是从磁盘读取数据的;
只有当article不再是空数据库的时候,才会持久化到磁盘中;
4、集合的基本操作(collection):
# 创建集合 > db.createCollection("my") { "ok" : 1 } ## 显示集合列表 > show collections my ### 删除集合 > db.my.drop() true
5、文档的基本操作(document):
# 想comment集合中插入一条数据: > db.comment.insert({"articleid":"100001","content":"我们不应该把清晨浪费在手机上, 健康很重要, 一杯温水幸福你我 他.","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date("2019-0805T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"}) WriteResult({ "nInserted" : 1 }) ## 上面的命令可以隐式创建comment集合: > show collections comment ### 基本的查询操作 > db.comment.find() { "_id" : ObjectId("646734f3b738498991ffac6a"), "articleid" : "100001", "content" : "我们不应该把清晨浪费在手机上, 健康很重要, 一杯温水幸福你我 他.", "userid" : "1002", "nickname" : "相忘于江湖", "createdatetime" : ISODate("1970-01-01T00:00:00Z"), "likenum" : 1000, "state" : "1" } #### 一次插入多条数据 > db.comment.insertMany([ ... {"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在手机上, 健康很重要, 一杯温水幸福你我 他.","userid":"1002","nickname":"相忘于江湖","createdatetime":new Date("2019-0805T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"}, ... {"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水, 冬天喝温开水","userid":"1005","nickname":"伊人憔 悴","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"}, ... {"_id":"3","articleid":"100001","content":"我一直喝凉开水, 冬天夏天都喝.","userid":"1004","nickname":"杰克船 长","createdatetime":new Date("2019-08-06T01:05:06.321Z"),"likenum":NumberInt(666),"state":"1"}, ... {"_id":"4","articleid":"100001","content":"专家说不能空腹吃饭, 影响健康.","userid":"1003","nickname":"凯 撒","createdatetime":new Date("2019-08-06T08:18:35.288Z"),"likenum":NumberInt(2000),"state":"1"}, ... {"_id":"5","articleid":"100001","content":"研究表明, 刚烧开的水千万不能喝, 因为烫 嘴.","userid":"1003","nickname":"凯撒","createdatetime":new Date("2019-0806T11:01:02.521Z"),"likenum":NumberInt(3000),"state":"1"} ... ... ]) 返回结构: { "acknowledged" : true, "insertedIds" : [ "1", "2", "3", "4", "5" ] } ##### 再次查询: > db.comment.find() { "_id" : ObjectId("646734f3b738498991ffac6a"), "articleid" : "100001", "content" : "我们不应该把清晨浪费在手机上, 健康很重要, 一杯温水幸福你我 他.", "userid" : "1002", "nickname" : "相忘于江湖", "createdatetime" : ISODate("1970-01-01T00:00:00Z"), "likenum" : 1000, "state" : "1" } { "_id" : "1", "articleid" : "100001", "content" : "我们不应该把清晨浪费在手机上, 健康很重要, 一杯温水幸福你我 他.", "userid" : "1002", "nickname" : "相忘于江湖", "createdatetime" : ISODate("1970-01-01T00:00:00Z"), "likenum" : 1000, "state" : "1" } { "_id" : "2", "articleid" : "100001", "content" : "我夏天空腹喝凉开水, 冬天喝温开水", "userid" : "1005", "nickname" : "伊人憔 悴", "createdatetime" : ISODate("2019-08-05T23:58:51.485Z"), "likenum" : 888, "state" : "1" } { "_id" : "3", "articleid" : "100001", "content" : "我一直喝凉开水, 冬天夏天都喝.", "userid" : "1004", "nickname" : "杰克船 长", "createdatetime" : ISODate("2019-08-06T01:05:06.321Z"), "likenum" : 666, "state" : "1" } { "_id" : "4", "articleid" : "100001", "content" : "专家说不能空腹吃饭, 影响健康.", "userid" : "1003", "nickname" : "凯 撒", "createdatetime" : ISODate("2019-08-06T08:18:35.288Z"), "likenum" : 2000, "state" : "1" } { "_id" : "5", "articleid" : "100001", "content" : "研究表明, 刚烧开的水千万不能喝, 因为烫 嘴.", "userid" : "1003", "nickname" : "凯撒", "createdatetime" : ISODate("1970-01-01T00:00:00Z"), "likenum" : 3000, "state" : "1" }
可以看到,当我们插入数据时,如果自定了_id,那么就用这个作为ID,但是如果没指定,则会生成一个UUID字符串作为_id。