mongoDB的基本命令

mongoDB的使用

简介

​ MongoBD是一款由C++语言开发基于分布式文件存储的非关系型数据库(nosql database),主要适用于存储数据量大、读写操作频繁且价值较低的数据集,例如,用户的评论数据等。

​ MongoDB也是一款最想关系型数据库的非关系型数据库,其内部结构为:

文档(相当于数据库中的表中一行数据)+ 集合(相当于数据库中的表)+数据库。

​ MongoDB服务就相当于mysql服务。

​ 一个MongoDB服务中的架构均是一对多的关系,MongoDB的查询功能十分的强大,常见的关系型数据库的查询功能MongoDB均能够实现,且MongoDB支持数据所应,能极大提高大数据的查询性能。

MongoDB主要的功能特点

(空泛,不贴近学习)

  1. 面向对象存储
  2. 模式自由
  3. 支持完全索引,包含内部对象
  4. 支持动态查询
  5. 支持数据恢复与故障恢复
  6. 使用高性能的二进制进行数据的存储,包括大型的对象(视频)
  7. 自动碎片处理,支持云计算层次扩展
  8. 支持多种编程语言的实现
  9. 文件的存储格式是类似于JSON的BSON格式。

MongoDB的数据类型

类型描述
String字符串类型,MongoDB只认为编码格式为UTF-8的字符串是合法的
Integer整形
NULL空值类型
Booealn布尔类型
Object内嵌文档类型
ObjectId创建文档ID
Timestamp时间戳,记录文档时间
Array数组类型
Binary Data二进制类型
Code代码类型,eg :js
Regular expression正则表达式类型

其中

Object ID

是MongoDB默认使用的文档 _id 类型,ObjectId相当于主键,当用户存储数据时未指定数据__id时,mongodb自动默认生成Object ID类型的数据作为 _id 。

ObjectId特点,是一种12bit的数据,其中:

  • 4bit时时间戳,格林尼治时间UTC,比北京晚8小时
  • 3bit为机器标识码
  • 2bit是但是MongoDB实例的进程PID
  • 3bit是随机序列号
时间戳Timestamp

​ 是一组64bit的值。前32bit是一个time-time值(与Unix新纪元(1970/1/1)的时间差的秒数);后32bit是某秒的递增序号。在单一mongondb中时间戳是唯一的。

时间Date

表当前时间距离Unix新纪元时间的毫秒值,有符号,新纪元之前的时间为负数,与java时间相同。

优化

1、文档的 _id 是自动生成的好还是指定的好?

​ 自动生成的好,自动生成的ID在建立索引时性能比自己指定的要高,推荐使用默认值。

2、每个文档中均有字段,字段名应为短字段名最好,可提高查询效率。

安装

window系统MongoDB安装

傻瓜式安装即可。

打开MongonDB的启动程序,找到bin目录下存在:

mongo.exe : 客户端

mongod.exe : 服务启动

指定mongondb数据存放地址启动

1、在bin目录下打开命令窗口

mongod --dbpath=地址

2、默认端口号 : 27017

3、使用mongo,连接服务,命令行窗口

mongo

4、查看数据库

show dbs

5、不使用默认端口号启动mongoDB服务

mongod --dbpath=地址 -port=8787

6、mongo连接,指定ip与端口

mongo 127.0.0.1:8787
linux环境下docker安装mongodb
docker run -itd --name=docker_mongodb -p 27017:27017 mongo

常用命令

选择或创建数据库,不存在则创建

use commentdb 

查看数据库

show dbs

查看集合,需要先选择数据库

show collections

修改集合的名称

db.comments.renamecollection("comment")

使用集合对文档进行操作

插入数据

db.集合名称.insert(数据)

eg: comment集合若没有则创建,插入后一定存在 _id 字段,不指定则默认ObjectId, _id必须唯一

db.comment.insert({name:"Jankin",age:13})

查询所有

db.comment.find()

带条件查询

db.comment.find({name:"Jankin"})

只查询一条数据

db.comment.findOne()

查询指定条数

db.comment.find().limit(num)

若想按某一字段排序查询

当sort中json的值为1时,表示升序排序

当sort中json的值为-1时,表示降序排序

db.comment.find().sort({字段名:1/-1})

若想排除存在某些字段的值

eg:查询点赞数存在,且不为空的评论

db.comment.find({thumbup:{$ne : null}}).sort({thumbup:-1})

修改文档前json为条件,后为修改的值,将文档内的数据覆盖,只有_id 与{“name”:“Jankin-demo”}

db.comment.update({"_id":值},{“name”:"Jankin-demo"})

指定修改字段 ,使用mongodb中的修改器 s e t , 或 者 称 set,或者称 setset为文档字段增加器,若增加的字段存在,则设置原字段的值,若不存在,则添加;之所以为文档字段增加器,是因为与之相反的$unset可以删除指定文档的域

db.comment.update({"_id":值},{$set:{“name”:"Jankin-demo"}})

db.comment.uppdate({"_id":值},{$unset:{“name”:"Jankin-demo"}})

删除文档

db.集合名称.remove(条件)

删除全部,慎用

db.集合名称.remove({})

统计条数

db.集合名称.count(条件)

模糊查询——正则表达式

查询包含Jankin的数据

db.comment.find({name:"/Jankin/"})
or  上下等价
db.comment.find({name:{$regex:"Jankin"}})

查询以Jankin开头的数据^

db.comment.find({name:"/^Jankin/"})

查询以Jankin结尾的数据$

db.comment.find({name:"/Jankin$/"})

大于$gt

大于等于$gte

小于 $lt

小于等于$lte

不等于$ne

db.comment.find({name:{$ne : 9090}}) 

包含与不包含 $in $nin

db.comment.find({name:{$in : [9090,9909]}}) 

条件连接 and 与 or

eg,查询数据大于等于1000并且小于等于3000的数据

db.comment.find({$and:[{num:{$lte:3000}},{num:{$gte:1000}}]) 

列值增长,对某列的值进行增长或减少$inc

eg:给 _id的文档字段num 值加1

db.comment.update({条件},{$inc:{num:1}})

对于给某一数值类型的字段增加或减少某一些数值时,尽量使用inc来实现,因为在程序中自己获得然后修改,最后保存在mongoDB中可能导致数据的不一致。而在mongoDB中使用列值增长来进行修改就不会发生这种情况。

可视化工具robomongo

下载免费的Robo 3T,官网下载,傻瓜式安装

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值