关闭

mongodb的命令行操作命令详解(增删改查、高级查询)

标签: mongodb命令行增删改查高级查询
5048人阅读 评论(0) 收藏 举报
分类:

本文为上文的续篇,主要讲解mongodb在cmd的直接操作命令,我的mongodb是安装在d:\mongodb下

1,mongodb启动服务 :

  • 命令行方式启动:
    . 直接cmd下进入mongodb的bin目录,输入mongod.exe –dbpath d:\mongodb\db 启动成功
  • 配置文件方式启动:
    .对于一些大神来说,普通的启动满足不了心里需求(玩笑),对于专业的DBA来说,会在启动mongodb数据库实例的时候加进去好多参数以便使得系统运行更高效稳定,但是如果吧参数都加载mongod的后面会使得参数混乱且每次都得手动的敲进去,不好管理,mongodb为此提供了配置文件启动的方式
    .新建配置文件mongodb.cnf 编辑内容 dbpath=d:\mongodb\data\db保存在bin的同级目录下,打开cmd 进入bin下,输入mongod.exe -f d:\mongodb\mongodb.cnf 启动成功
  • daemon方式启动
    .以上的方式都有一个明显的缺陷,即如果控制台的界面不小心被关闭,则mongodb的服务也会随之停止,这带来了极大的不方便和不安全,这也促使有了daemon启动方式,这种方式需要加上–fork 即可,但是如果用到fork参数就必须使用 –logpath参数指定日志文件路径。
    .data文件夹下新建log文件夹,并在文件夹下新建log1.log文件。进入bin目录,输入 mongod.exe –dbpath d:\mongodb\data\db –logpath d:\mongodb\data\log\log1.log –fork 启动成功。
  • mongod参数说明:
    .dbpath 数据库路径
    .logpath日志目录
    .logappend 错误日志采用追加模式
    .bind_ip 对外服务绑定的ip 一般置为空,即绑定本地多有可用ip上。 但是如果有需要可以单独制定
    .port 对外服务端口 ,web管理端口一般在这个基础上+1000
    .fork 服务在后台以daemon方式运行
    .journal 开启日志功能,通过保存日志来尖山单机故障的恢复时间。
    .syncdelay 系统同步刷新磁盘的时间
    .directoryperdb 每个db存放在单独的目录中,建议设置该参数
    .maxConns 最大连接数
    .repairpath 执行repair时的临时路径,在如果没有开启journal的时候,异常down机后,必须执行repair重启,否则会报错,上一篇文章有提到。

2,mongodb停止服务 :

  • Control-C
  • db.shutdownServer()
  • 值得注意的是,最好不要用linux的kill命令来杀死进程,这样会导致数据库数据的损坏。

3,新建数据库

  • 在mongodb中,并没有单独新建数据库的命令,mongodb是非关系型数据库中最像关系型数据库的数据库,所以,有很多命令也和sql有一定的相似之处。
  • 打开数据库连接:进入到bin目录 输入命令:mongo.exe
  • 查询所有的数据库 show dbs 或者 show databases
  • 当我们想新建一个没有的数据库的时候,例如我们想新建数据库 testTwo ,直接可以输入命令 use testTwo即可,在testTwo存在的情况下回切换到testTwo,在不存在的情况下就会新建这个数据库。

4,插入记录
- mongodb之下和sql表对应的叫做集合,mongo中没有表的概念,只有集合的概念,和数据库类似,集合也无需单独的新建,在插入记录的同时,如果存在集合则插入数据到该集合中,如果不存在集合,则新建集合。
- db.user.save({“name”:”wpz”,”password”:”123”});
- 上面的命令代表新建user集合 并插入数据{“name”:”wpz”,”password”:”123”}
- 也可以定义为变量存储
- i={“name”:”wpz”,”password”:”123”}; db.user.save(i);
- 也可以用更灵活的for循环来存贮
- for(var i=1;i<10;i++) db.user.save({“name”:”wpz”,”password”:”123”});

5,普通数据查询

  • mongodb的数据查询可以通过find()来查询,有几种常见的查询方式:
  • db.user.find() 查询出所有对象,这应该是最简单的全部查找的写法
  • 这里写图片描述
  • 第二种,使用游标来查询
  • var cursor=db.user.find();
  • while(cursor.hasNext()) printjson(cursor.next());
  • 这里写图片描述
  • 第三种普通查询,游标可以看成为数组,可以查询数组上特定位置的值
  • 这里写图片描述
  • 当然还有另外一种方式做数组
  • 这里写图片描述
  • 还有一种直接打印json形式的查询方式

6,条件数据查询

  • 条件数据查询,就是在查询中加入过滤条件,mongodb的精确过滤条件是制定查询数据中json数据。 例如 db.user.find({“age”;”20”}) 相当于sql中的 select * from user where age = ‘20’
  • db.user.find({“age”;”20”}) 这句话结合上面的普通查询,就可以查询出大部分想要的数据,但是有时候我们需要指定查询的字段:
    这里写图片描述
    3,mongodb为了减少游标的内存开销还提供了findOne()方法,当然,方法内可以加过滤条件
    . db.user.findOne()
    . db.user.findOne({“name”:”wpz”})
    这两种写法都是合法的。
    4,mongodb还提供limit来限制条数
    . db.user.find().limit(2)
    . db.user.find({“name”:”wpz”}).limit(2)
    5,条件符查询 mongodb支持< <= > >= 四种运算符查询

    • db.user.find({“age”:{$gt:30}}) age大于30
    • db.user.find({“age”:{$lt:30}}) age小于30
    • db.user.find({“age”:{$gte:30}}) age大于或等于30
    • db.user.find({“age”:{$lte:30}}) age小于或等于30
      多条件查询
    • db.user.find({“age”:{,gt:10,lte:30}})

    6,匹配所有

    • $all 这个操作符号类似于sql中的in运算符,但是不同的是in只需要满足 一个值,但是alll需要满足所有值。
  • db.user.find({“age”:{$all:[6,8]}});

    7,查询某一个字段是否存在:$exists

    • db.user.find({“password”:{$exists:true}}); password存在的记录
    • db.user.find({“password”:{$exists:false}}); password不存在的记录

    8,null值得处理

    • null处理比较奇怪,因为mongodb中的数据集合不能指定特定的格式,没有sql中的字段的概念,就是说,在同一个集合中有的字段在一条数据中存在,在另一条数据中不存在,所以,要找出改字段是不是为空,先要判断这个字段是不是存在才行。
    • db.user.find({age:{“in":[null],"exists”:true}});

    9,取模运算 $mod

    • 查询所有age取模10之后为0 的数据,即查询age为10的倍数的字段:
      db.user.find({age:{$mod:[10,0]}});

    10,不等于 $ne –> (not equals)

    • 查询所有age不等于10 的数据
    • db.user.find({age:{$ne:10}});

    11,包含 $in

    • 查询所有age等于10 或者20 的数据
    • db.user.find({age:{$in:[10,20]}});

    12,不包含 $nin

    • 查询所有age不等于10 或者20 的数据
    • db.user.find({age:{$nin:[10,20]}});

    13,数组元素的个数 $size

    • 查询age数据元素个数为3的数据
    • db.user.find({age:{$size:3}});

    14,正则表达式匹配查询

    • name不以wpz开头的数据
    • db.user.find({“name”:{$not:/^wpz.*/}});

15,count查询条数
- db.user.find().count();

16,skip 设置查询数据的起点

查询从第三条数据之后的五条数据
- db.user.find().skip(3).limit(5);

17 排序 sort
- db.user.find().sort({age:1}); 按照age升序
- db.user.find().sort({age:-1}); 按照age降序

mongodb也支持存储过程的查询。

7,数据修改更新

  1. mongodb的修改是比较烦的一种 ,要用到$set:
  2. 例如,吧mongodb中,name为wpz,修改为 wpz_new
    db.user.update({“name”:”wpz”},{$set:”name”:”wpz_new”});

8,数据删除

  1. mongodb的删除比较简单,格式如下:
    db.user.remove({“name”:”wpz”});

其他说明

  1. 在上面查询出的数据可以看出,所有的数据不管指定或者不指定都会带有_id字段,这个字段相当于mongodb中的uuid,是数据唯一性的标示,可以理解为sql中的主键。
  2. mongodb解压的目录:
    这里写图片描述
    每一个exe都有对应的作用,相当于mongodb提供的一些常用的工具,例如,第一个是讲bson格式文件转存在json格式数据的工具,读者可自行查询每个工具的作用。

3,mongodb也提供了一些GUI管理工具,可视化的管理mongodb数据库。
.mongoVUE:提供mongodb的基本操作,优点是简单易用,但是总体上功能比较弱
.RockMongo 是windows平台首选的mongodb管理工具,速度快,安装简单,支持多种语言,支持多主机,可以保证数据的安全性。
.MongoHUB 是针对mac平台的mongodb管理工具。

小广告:本人出售基类的1000多GB的视频、文档资料。需要的添加QQ:205267898获取。包含javaEE 体系的几乎所有知识点。

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18562次
    • 积分:896
    • 等级:
    • 排名:千里之外
    • 原创:73篇
    • 转载:5篇
    • 译文:0篇
    • 评论:2条