linux mongo数据库启动及相关操作

启动mongodb服务

首先需要建立一个文件夹,用来存放mongodb产生的数据库文件。

为了便于管理,我们将该文件夹放在mongodb安装目录下,即和bin目录平级。

mkdir /usr/local/mongodb/data       
#其中/usr/local/mongodb 为本人的安装目录

在我们启动mongo后会产生数据文件和日志文件,为了便于区分和管理,我们在data目录下再分别建立两个文件夹

mkdir /usr/local/mongodb/data/db     
#用来存储数据文件
mkdir /usr/local/mongodb/data/log    
#用来存储日志文件

接下里我们就可以启动mongodb服务了

mongod -dbpath=/usr/local/mongodb/data/db -logpath=/usr/local/mongodb/data/log/mongodb.log
#其中dbpath表示数据文件存储路径
#logpath表示日志文件存储路径

我们会看到在终端上产生类似于这样的打印信息

因为我们启用了日志,所以更细节的过程会在日志文件中产生

日志文件中

此时这个终端代表了服务器,无法进行输入了,也不能关闭。想要操作客户端就得新打开一个终端

启动mongo客户端

重新打开一个终端,输入

mongo 启动客户端

当出现这个箭头的时候就表明mongo客户端已经启动了。

退出mongo客户端

如果想要退出客户端,输入exit

关闭mongo服务

由于打开mongo服务的那个终端输入字符也没用了,所以我们就在客户端的那个终端中来关闭服务端。

mongod -shutdown -dbpath=/usr/local/mongodb/data/db

其他注意事项

在启动mongo服务时,如果不显示指定路径,则mongo会去根目录下寻找data/db,如果没有找到,会报错。

所以我们也可以直接在根目录下建立/data/db文件夹,我们也不要在用-dbpath=xxx这个参数了。但是会有权限的问题,所以我们还是在mongo安装目录下建立数据文件存储路径,而且名字也可以随自己更改了。

如果觉得每次启动mngo服务的时候需要指定dbpath和logpath太烦了,可以在data文件下建立2个shell脚本文件,一个启动,一个关闭。把命令存到脚本文件里面,以后只需要执行这个脚本文件就行了。别忘了修改脚本文件的权限。

以下内容参考菜鸟教程|mongo

数据库结构

SQL MongoDB 说明
database database 数据库
table collection 数据表/集合
row document 记录/文档
column field 字段/域

在mongo数据库,一个mongo服务可以有多个数据库,一个数据库可以有多个集合,一个集合由多个文档构成,一个文档由多个域构成

数据库相关操作

创建/转换数据库

> use stu #如果没有则自动创建stu数据库

注意mongodb会自动创建4个数据库,admin,config,local,test。这四张表默认存在。stu是我们自己添加的

查看所有数据库

> show dbs    #如果创建的数据库中没有集合则不会显示

删除数据库

> use test        #选定数据库
> db.dropDatabase()

显示当前数据库

> db

创建集合

> db.createCollection(name,option)    #语法格式,option为参数,可选
> db.createCollection("stu")        #不带参数
> db.createCollection("stu",{capped:true,autoINdexID:true,size:100000,max:10000})    #带参数

参数说明:

capped 布尔 如果为true,则创建固定集合。固定集合是指有固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为true时,必须指定size参数
autoIndId 布尔 如果为true,则自动在_id字段创建索引。默认为false
size 数值 为固定集合指定一个最大值(以字节记)
max 数值 指定固定集合中包含文档的最大数量

显示当前数据库的集合

> show collections
#或者
> show tables

删除集合

> db.stu.drop()

插入文档

> db.stu.insert({        
    name:"zzzz",
    color:"red"
})
#stu为集合,如果我们没有先创建stu集合,则mongo会自动创建
#也可以使用变量来实现插入
>document = ({
    name:"zzzz",
    color:"red"
})
> db.stu.insert(document)

显示文档

> db.fruit.find()    #fruit为集合

更新文档

insert方法

语法格式

db.collection.update(
    <query>,
    <update>,
    {
        upsert: <boolean>,
        multi: <boolean>,
        writeConcern: <document>
    }
)

参数解析:

query:需要更新的值

update:更新的操作

upsert:可选参数。如果<query>的值找不到,是否插入新的值。默认为false,不插入

multi:可选参数。默认为false,表示只更新第一条数据。true,表示更新所有匹配的数据

writeConcern:可选参数,抛出异常的级别

例子:

> db.stu.update({"fruit":"apple"},{$set:{"fruit":"banana"}})
#不含参数
#将"fruit":"apple"换成"fruit":"banana"
> db.stu.update({"fruit":"apple"},{$set:{"fruit":"banana"}},{multi:true})
#更新所有匹配文档

save方法

语法格式

db.stu.save(
    <document>,
    {
        writeConcern: <document>
    }
)

参数解析:

document:文档数据

writeConcern:可选,抛出异常级别

例子:

db.stu.save( {
    "_id":ObjectId("5b9872860191a2342033047b"),
    "fruit":"watermolen",
    "color":"red",
    quality:'8kg'
})

删除文档

remove的方法

> db.stu.remove({"fruit":"watermolen"})        #删除所有符合条件的文档
> db.stu.remove({"fruit":"watermolen"},1)      #删除第一条符合条件的文档 

delete方法

> db.stu.deleteOne({fruit:'banana'})    #删除符合条件的第一个文档
> db.stu.deleteMany({fruit:'banana'})   #删除符合记录的所以文档
> db.stu.deleteMany()            #删除符合记录的所有文档

查询文档

find结构

> db.stu.find(query, projection)
#query : 可选,查找的条件,无值表示查找全部
#projection :可选,表示在查找的结果中需要显示的值,0和1表示
> db.stu.find()    #显示所有文档
> db.stu.find().pretty()    #以结构化方式显示文档
> db.stu.find({"fruit":"red"}).pretty()    #以结构化方式显示符合条件的文档
> db.stu.find({$or:[{fruit:'banana'},{fruit:'apple'}]}).pretty()    #符合任意一个条件即可 or
> db.stu.find({fruit:'banana',color:'yellow'}).pretty()    #符合全部条件 与

条件操作符

> db.stu.find({fruit:{$gt:'az'}},{_id:0})
#查询比'za'大的字符串,不显示_id

比较符说明

$gt --------- greater than >

$lt ---------- less than <

$gte ---------- gt equal >=

$lte --------- lt equal <=

$ne ---------- not equal !=

$eq ---------- equal =

模糊查询

> db.stu.find({fruit:/a/},{_id:0})        #查找包含a
> db.stu.find({fruit:/^a/},{_id:0})       #查找a开头
> db.stu.find({fruit:/a$/},{_id:0})       #查找a结尾

$type操作符

> db.stu.find({fruit:{$type:'string'}},{_id:0})    #查找类型为string
类型 数字
double 1
string 2
object 3
array 4
binary data 5
undefined 6
object id 7
boolean 8
date 9
null 10
regular expression 11
javascript 13
symbol 14
javascript(with scope) 15
32-bit integer 16
timestamp 17
64-bit integer 18
min key 255
max key 127

limit和skip方法

> db.stu.find({},{_id:0}).limit(2)    #显示前两条,不显示_id
> db.stu.find({},{_id:0}).skip(2)     #跳过前两行再显示,不显示_id

混合用时,不论顺序,先执行skip(),再执行limit()

排序 sort

> db.stu.find({},{_id:0}).sort({color:1})    #color按照升序排列,不显示_id
> db.stu.find({},{_id:0}).sort({color:-1})   #color按照降序排列,不显示_id

当limit(),skip(),sort()三个一起混用时,不论排列顺序,先执行sort(),再执行skip(),最后执行limit()

索引

> db.stu.createIndex({'color':1})    #无参数,为color字段创建索引
> db.stu.createIndex({'color':1},{background :true})    #在后台创建索引
> db.stu.getIndexes()    #查看当前索引

猜你喜欢

转载自blog.csdn.net/qq_34759481/article/details/82656007