博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongoDB基础使用
阅读量:5310 次
发布时间:2019-06-14

本文共 7680 字,大约阅读时间需要 25 分钟。

环境交代

操作系统: CentOS 6.8 64位

mongodb: 4.06

安装

官方下载地址:

阿里云镜像地址:

mongodb-server:

mongodb-shell:

如果我们下载的mongodb是社区版的源码包,那么官方已经帮我们编译好,因此不需要我们再次编译,我们只需将下载的文件解压后移动到安装目录即可,比如:移动到/usr/local/mongodb。

当然我们这里使用的是rpm包安装:

下载:

wget https://mirrors.aliyun.com/mongodb/yum/redhat/6/mongodb-org/4.0/x86_64/RPMS/mongodb-org-server-4.0.6-1.el6.x86_64.rpm  wget https://mirrors.aliyun.com/mongodb/yum/redhat/6/mongodb-org/4.0/x86_64/RPMS/mongodb-org-shell-4.0.6-1.el6.x86_64.rpm

安装

rpm -ivh mongodb-org-server-4.0.6-1.el6.x86_64.rpmrpm -ivh mongodb-org-shell-4.0.6-1.el6.x86_64.rpm

执行完以上两个步骤,安装完成后,我们的系统中会多出两个命令:mongo(客户端) 和 mongod(服务端),同时生成一个配置文件在/etc/mongod.conf

启动

启动服务端

方式1:

# 指定配置文件启动mongod --config /etc/mongod.conf

方式2:

如果先使用上一种方式启动,那么使用下面的方法的时候很可能会遇到错误,错误可根据报错内容以及日志内容进行解决。默认日志路径:/var/log/mongodb/mongod.log。以下方式启动,会默认使用/etc/mongod.conf的配置文件。

# 启动service mongod start# 重启service mongod restart# 关闭service mongod stop# 设置开机启动chkconfig mongod on

mongodb配置说明请参考:

启动客户端

# 启动客户端连接服务端mongo#客户端的更多使用方式查看mongo --help

卸载mongoDB

停止mogoDB

sudo service mongod stop

移除之前安装的软件包

sudo yum erase $(rpm -qa | grep mongodb-org)

删除mongoDB数据库和日志文件

sudo rm -r /var/log/mongodbsudo rm -r /var/lib/mongo

使用

基本使用

# 查看数据库show dbsshow databases查看数据表(其实叫集合更合适)的列表show tablesshow collections# 切换数据库use tableName # 查看命令帮助db.help() # 删除tableName表,tableName为表名称db.tableName.drop() # 删除当前切换到的数据库db.dropDatabase() # 创建表db.createCollection(tableName)

创建用户

以非授权的模式启动MongoDB
非授权:linux/Mac : mongod --config /etc/mongod.confwindows  : mongod --config c:\mongodb\etc\mongo.conf  或者  net start mongodb (前提是mongo安装到了服务里面)

备注:/mongodb/etc/mongo.conf 位mongo配置文件所在的地址

授权:mongod -f /mongodb/etc/mongo.conf --auth

备注:

1.--auth代表授权启动,需要帐号密码才能访问

2.auth=true可以加到mongo.conf配置文件里面去进行统一管理

创建管理员

1.通过非授权的方式启动mongo

2.创建admin数据库

use admin

3.添加管理员用户

db.createUser({user:"用户名",pwd:"密码",roles:["root"]})

4.认证

db.auth("用户", "密码")
以授权的方式启动Mongo,给使用的数据库添加用户

1.切换数据库

use test

2.创建用户

db.createUser({user: "root", pwd: "123456", roles: [{ role: "dbOwner", db: "test" }]})

3.通过客户端连接test数据库

内建角色
Read:允许用户读取指定数据库readWrite:允许用户读写指定数据库dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profileuserAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。root:只在admin数据库中可用。超级账号,超级权限
删除用户
1.use adminswitched to db admindb.dropUser("flowpp")false2.切换flowpp ,删除用户flowpp,删除成功use flowppswitched to db flowppdb.dropUser("flowpp")true
注释:删除用户的时候需要切换到用户管理的数据库才可以删除

查看系统用户

use admindb.system.users.find()  # 显示当前系统用户

MongoDB role 类型

数据库用户角色(Database User Roles)    read:授予User只读数据的权限    readWrite:授予User读写数据的权限数据库管理角色(Database Administration Roles):    dbAdmin:在当前dB中执行管理操作    dbOwner:在当前DB中执行任意操作    userAdmin:在当前DB中管理User备份和还原角色(Backup and Restoration Roles):    backup    restore跨库角色(All-Database Roles):    readAnyDatabase:授予在所有数据库上读取数据的权限    readWriteAnyDatabase:授予在所有数据库上读写数据的权限    userAdminAnyDatabase:授予在所有数据库上管理User的权限    dbAdminAnyDatabase:授予管理所有数据库的权限集群管理角色(Cluster Administration Roles):    clusterAdmin:授予管理集群的最高权限    clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.    clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限    hostManager:管理Server
注释:解决mongodb无法正常重启

vi /etc/local/mongond.conf

security:    authorization: enabled #注意缩进,参照其他的值来改,若是缩进不对可能导致后面服务不能重启   # 再重启服务即可rm -rf /var/run/mongodb/mongod.logrm -rf /var/lib/mongo/mkdir /var/lib/mongo/
# 解决方法chmod 777 /tmp# 再重启

隐式添加

如果下级结构添加了,那么上级结构自动也被添加

比如:我在一个不存在的数据库下创建了一张表,那么这个数据库会被自动创建。

数据表也支持隐式创建

插入数据

db.tableName.insert()

例1:往user表插入一条

db.user.insert({'name':'shusheng'})db.user.insertOne({'name':'shusheng'})

例2:往user表插入多条

db.user.insert([{'name':'郭昌松','age':20}, {'name':'李志友','girl':['李文斌,李志光']}])db.user.insertMany([{'name':'郭昌松','age':20}, {'name':'李志友','girl':['李文斌,李志光']}])

MongoDb支持的数据类型

数据类型 说明 补充说明
Object ID 文档id
String 字符串 必须是utf-8编码
Boolean 布尔值 只能是 true或者false
Double 浮点型
Arrays 数据(列表)
Object 类似于Python的字典或者js中的json
Null 只能存Null
TimeStamp 时间戳
Date unix格式的时间 YYYY-MM-DD new Date('2019-02-14')

注:

每个文档都有的一个属性,其名字为_id,我们可以自己设置,如果未设置,那么mongodb会自动抱我生成,类型为Object ID。自动生成的Object ID是由12位的16进制数组成。前4个为当前时间戳,接下来3个位机器ID,接下来2个为mongodb服务的进程id,最后为自增数据、

查询数据

db.tableName.find(where, fileds)

where:查询条件,可选

fileds获取指定的列, 可选

操作 格式 范例 关系型数据库中的类似语句
等于 {<key>:<value>} db.col.find({"by":"书生"}).pretty() where by = '书生'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

注:使用pretty()可以让查询到的数据以更好看的形式展现。

例1:

db.member.find({name:'baba'})

查询name='baba'的记录

例2:

db.member.find({name:'baba',age:30})

查询name='baba'并且age=30的记录

例3:

db.member.find({age:{$lt:26}})

查询age小于26的记录

例4:

db.member.find({age:{$lt:26, $gt:20}})

查询age大于20小于26的记录

例5:(投影操作)

db.user.find({},{name: 1, _id: 0 })

查询所有的数据,只获取name列的值。name的值为1表示获取该列的值,为0表示不获取该列的值。

附:以格式化后的结构展示查询结果

db.tableName.find(where).pretty()

删除数据

db.member.remove(where,justOne)

where:删除的条件表达式

justOne:当符合条件的文档有多条时,为true只删除一条记录,为false表示全部删除,默认为false

更新数据

基本语法

db.tableName.update(where, data, upsert, multi)

where:条件表达式(更新的条件)

data:要更新的数据
upsert:为true时,表示如果根据查询条件表达式找不到记录,则将准备更新的数据插入到表中作为一条新记录,默认为false
multi:默认为false,表示只更新符合条件的一条记录,如果为true时,表示更新所有的符合条件的记录,该参数必须在含有$操作下才生效

例子的数据准备:

db.member.insert({name: 'baba', age: 30, sex: '男', 'money': 999999999})

默认情况下,update会覆盖整个文档(整条记录内容)

例1:

db.member.update({name: 'baba'},{'money': 99999999998})

执行完上面的操作,整条记录会变成:{'money': 99999999998}

只更改部分字段值

db.tableName.update(条件表达式, {$set: 修改的内容})

$set 可以指定修改某些字段(键)

例2:

db.member.update({name: 'baba'}, {$set: {'money': 99999999998}})

执行完上面的操作,整条记录会变成:{name: 'baba', age: 30, sex: '男', 'money': 99999999998}

例3:第三个参数的使用例子

db.member.update({name: 'bingbing'}, {name: 'libingbing', age: 40}, true)

如果根据{name: 'bingbing'}找不到符合条件的记录,则将{name: 'libingbing', age: 40}插入到数据表中作为一条新记录。

例4:第四个参数的使用例子

正确使用方法:

db.member.update({name: '小锅'}, {$set: {name: '火锅', age: 3}}, false, true)

错误使用方法:

db.member.update({name: '小锅'}, {name: '火锅', age: 3}, false, true)

更多查询条件

逻辑运算符的使用

AND查询:在Json中直接编写多个条件即可。

# 查询name为baba 并且 age等于30的db.member.find({name: 'baba', age: 30})

OR 查询:值应该是一个数据,使用$or标记

# 查询name为baba 或者 age等于30的db.member.find({$or: [{name: 'baba', age: 30}]})
# 查询 (name为baba 或者 age等于30) 并且性别为1的db.member.find({$or: [{name: 'baba', age: 30}], sex: 1})
范围运算符 $in$nin

判断是否在某个范围

db.member.find({age: {$in: [20, 22, 24]}})
正则条件 使用定界符 //或者$regex
db.member.find({name: {$regex: '^on\d+'}})db.member.find({name: /^on\d+/})
自定义查询 $where

可以直接使用js编写条件语句。

db.member.find({ $where: function(){        # this 指当前记录, 即每一条记录。查询会扫描整个表中的所有数据        return this.age > 20;    } })

读取指定数量的文档

会用到limit()skip()

limit(n):获取指定数量的文档

skip(n):跳过指定数量的文档

db.member.find({age: 20}).limit(3)db.member.find({age: 20}).skip(1)db.member.find({age: 20}).limit(3).skip(1)db.member.find({age: 20}).skip(1).limit(3)

排序 sort()

db.member.find().sort({age: -1, sex: 1})

统计 count()

db.member.find().count()db.member.find({条件})count()db.member.count()db.member.count({条件})

去重 distinct()

# 去重字段要被引号包着db.member.distinct("去重字段")db.member.distinct("去重字段", {条件})

Python操作MongoDB

pip3 install pymongo

转载于:https://www.cnblogs.com/spmt/p/10481387.html

你可能感兴趣的文章
Akka-Cluster(3)- ClusterClient, 集群客户端
查看>>
MongoDB-CRUD
查看>>
javaagent 简介
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
web前端面试题2017
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>
SOPC Builder中SystemID
查看>>
MySQL数据库备份工具mysqldump的使用(转)
查看>>
青海行--(7月19日)麦积山石窟
查看>>
NTP服务器配置
查看>>
【转】OO无双的blocking/non-blocking执行时刻
查看>>
深入理解java集合框架(jdk1.6源码)
查看>>
php截取后台登陆密码的代码
查看>>
选假球的故事
查看>>
ul li剧中对齐
查看>>