MongoDB是由C++语言编写的,是一个基于分布式存储的数据库。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
所谓关系型数据库:就是指由二维表及其之间的联系组成的一个数据组织。
所谓分布式存储:是将数据分散存储在多台独立的设备上。
MongoDB 更类似 Mysql,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。
Mysql 在大数据量时效率显著下降,MongoDB 更多时候作为关系数据库的一种替代。
二. MongoDB支持的数据类型
Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
MongoDB 数据存在内存,由 linux 系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
Redis 支持的数据结构丰富,包括 String、hash、list、set、sorted set 等。
MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
二者性能都比较高。
二者均支持持久化。
MongoDB 集群技术比较成熟,Redis 从 3.0 开始支持集群。
需要使用复杂 sql 的操作
事务性系统
问,不指定默认本地所有 IP;logpath arg--># 指定 MongoDB 日志文件,注意是指定文件不是目录;logappend --># 使用追加的方式写日志;
pidfilepath arg--># PID File 的完整路径,如果没有设置,则没有 PID
文件;--keyFile arg--># 集群的私钥的完整路径,只对于 Replica Set 架构
有效;unixSocketPrefix arg --># UNIX 域套接字替代目录,(默认为 /tmp);
fork--># 以守护进程的方式运行 MongoDB,创建服务器进程;auth --># 启用验证;cpu --># 定期显示 CPU 的 CPU 利用率和 iowait;dbpath arg--> # 指定数据库路径;diaglog arg--># diaglog 选项 0=off 1=W 2=R 3=both 7=W+some reads;directoryperdb--> # 设置每个数据库将被保存在一个单独的目录;journal--># 启用日志选项,MongoDB 的数据操作将会写入到journal 文件夹的文件里;journalOptions arg --># 启用日志诊断选项;ipv6 --># 启用 IPv6 选项;jsonp --># 允许 JSONP 形式通过 HTTP 访问(有安全影响);maxConns arg--> # 最大同时连接数 默认 2000;noauth --># 不启用验证;nohttpinterface--># 关闭 http 接口,默认关闭 27018 端口访问;noprealloc --># 禁用数据文件预分配(往往影响性能);noscripting --># 禁用脚本引擎;notablescan --># 不允许表扫描;nounixsocket--> # 禁用 Unix 套接字监听;nssize arg (=16)--> # 设置信数据库.ns 文件大小(MB);objcheck--> # 在收到客户数据,检查的有效性;profile arg--> # 档案参数 0=off 1=slow, 2=all;quota --># 限制每个数据库的文件数,设置默认为 8;quotaFiles arg--> # number of files allower per db, requires --quota;rest--> # 开启简单的 rest ;API--repair--> # 修复所有数据库 run repair on all dbs;repairpath arg--> # 修复库生成的文件的目录,默认为目录名称 dbpath;slowms arg (=100)--> # value of slow for profile and console log;smallfiles--> # 使用较小的默认文件;syncdelay arg (=60) --># 数据写入磁盘的时间秒数(0=never,不推荐);sysinfo--> # 打印一些诊断系统信息;upgrade --># 如果需要升级数.
进入bin目录中 ./mongod -f mongodb.conf进行启动
进入bin目录中 ./mongo 进行连接
七. 操作数据库
use DATABASE_NAME
> use shsxt
switched to db shsxt
> db
Shsxt
注:如果数据库不存在,则创建数据库,否则切换到指定数据库中,空的数据库是不显示的.
db.dropDatabase()
> db
shsxt
> db.dropDatabase()
{ "dropped" : "shsxt", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
name 是要创建的集合的名称;
options 是一个文件,用于指定配置的集合。
name: 是要创建的集合的名称capped: 是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义.
size: 限制集合使用空间的大小,默认为没有限制max: 集合中最大条数限制,默认为没有限制.
autoIndexId: 是否使用_id 作为索引,默认为使用(true 或 false)size 的优先级比 max 要高.
> db.shsxt.drop()
true
> show collections
>
1.1. insert()
user0 = {
"name":"zhangsan",
"age":18,
"hobbies":["music", "read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
db.user.insert(user0)
注:_id 字段,这个值必须在 user 集合中唯一,若不指定主键值,会自动分配一个值。
1.2. save()
user1 = {
"_id":"2",
"name":"lisi",
"age":20,
"hobbies":["music", "read"],
"addr":{
"country":"China",
"city":"BJ"
}
}
db.user.save(user1)
1.3. 批量插入时,只需要修改最后一个命令即可:db.user.insertMany([user1, user2, user3, user4, user5])
2. 更新文档
MongoDB 使用 update() 和 save() 方法来更新集合中的文档,我们详细来看下update 的应用,上一节已经介绍过 save()方法。update() 方法用于更新已存在的文档。
语法格式如下:db.collection.update(criteria, objNew, upsert, multi)
参数说明:
· criteria : update 的查询条件,类似 sql update 查询内 where 后面的。
· objNew : update 的对象和一些更新的操作符(如$,$inc...)等,也可以理解为 sql update 查询内 set 后面的.
upsert : 这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true为插入,默认是 false,不插入。
· multi : mongodb 默认是 false,只更新找到的第一条记录,如果这个参数为 true,就把按条件查出来多条记录全部更新。
3.删除文档
MongoDB remove()函数是用来移除集合中的数据,其语法格式如下所示:
db.user.remove(<query>, {justOne: <boolean>})
参数说明:
query:(可选)删除的文档的条件。
justOne :(可选)如果设为 true,则只删除一个文档,False 删除所有匹配的数据等价于db.user.deleteOne(<query>):删除符合条件的第一个文档.
删除所有数据命令:
db.user.remove({})
等价于
db.user.deleteMany({}) # 等于是清空该集合(表)
4.查询文档
查询所有
MongoDB 查询数据的语法格式如下:
db.user.find() # 等同于 db.user.find({})
# 去重
db.user.distinct(‘name‘)
find() 方法以非结构化的方式来显示所有文档。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.user.find().pretty()
pretty() 方法以格式化的方式来显示所有文档
注:在 MongoDB 中,用到方法都得用 $ 符号开头
5.运算
5.1 比较运算
=,!= (‘$ne‘) ,> (‘$gt‘) ,< (‘$lt‘) ,>= (‘$gte‘) ,<= (‘$lte’)
5.2 逻辑运算
MongoDB 中字典内用逗号分隔多个条件是 and 关系,或者直接用$and,$or,$not(与或非)
5.3 成员运算
成员运算无非 in 和 not in,MongoDB 中形式为$in , $nin
5.4 $type 操作符
5.5 正则定义在/ /内
5.6 投影:MongoDB 投影意思是只选择必要的数据而不是选择一整个文件的数据。 在 MongoDB 中,当执行 find()方法,那么它会显示一个文档所有字段。要限制这一点,需要设置的字段列表值 1 或 0。1 用来显示字段而 0 是用来隐藏字段,_id 会默认显示出来.
5.7 数组
5.8 排序:在 MongoDB 中使用使用 sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1 是用于降序排序.
5.9 分页:limit 表示取多少个 document,skip 代表跳过几个 document分页公式:db.user.find().skip((pageNum–1)*pageSize).limit(pageSize);
db.user.find().limit(2).skip(0) # 前两个
db.user.find().limit(2).skip(2) # 第三个和第四个
db.user.find().limit(2).skip(4) # 第五个和第六个
5.10 统计:# 查询_id 大于 3 的人数
# 方式一db.user.count({‘_id‘:{"$gt":3}})
# 方式二db.user.find({_id:{"$gt":3}}).count()
6.聚合:我们在查询时肯定会用到聚合,在 MongoDB 中聚合为 aggregate,聚合函数主要用到$match $group $avg $project $concat,可以加"$match"也可以不加$match
原文:https://www.cnblogs.com/ruanjianwei/p/12133339.html