MongoDB入门
一、mongoDB介绍
1.简介:
mongodb是一个跨平台,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。
MongoDB 的官方网站地址是:http://www.mongodb.org/
一个文档相当于mysql的一行记录,
2.适用场景:
- 数据量大
- 数据的价值低(数据少量丢失,影响不大)
- 写入操作频繁
3.特点
- 面向集合存储,易于存储对象类型的数据
- 模式自由
- 支持动态查询
- 支持完全索引,包含内部对象
- 支持复制和故障恢复
- 使用高效的二进制数据存储,包括大型对象(如视频等)
- 自动处理碎片,以支持云计算层次的扩展性
- 支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程序,社区中也提供了对 Erlang 及.NET 等平台的驱动程序
- 文件存储格式为 BSON(一种 JSON 的扩展)
4.mysql的数据结构
- MongoDB 的文档(document),相当于关系数据库中的一行记录。
- 多个文档组成一个集合(collection),相当于关系数据库的表。
- 多个集合(collection),逻辑上组织在一起,就是数据库(database)。
- 一个 MongoDB 实例支持多个数据库(database)。
5.MongoDB与MySQL数据库逻辑结构概念的对比
MongoDb | 关系型数据库Mysql |
数据库(databases) | 数据库(databases) |
集合(collections) | 表(table) |
文档(document) | 行(row) |
6.数据类型
数值类型 | 表达方式 |
null | 用于表示空值或者不存在的字段,{“x”:null} |
布尔型 | 布尔类型有两个值true和false,{“x”:true} |
数值 | shell默认使用64为浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可以使用NumberInt(4字节符号整数)NumberLong(8字节符号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)} |
字符串 | UTF-8字符串都可以表示为字符串类型的数据,{“x”:“呵呵”} |
日期 | 日期被存储为自新纪元依赖经过的毫秒数,不存储时区,{“x”:new Date()} |
正则表达式 | 查询时,使用正则表达式作为限定条件,语法与JavaScript的正则表达式相同,{“x”:/[abc]/} |
数组 | 数据列表或数据集可以表示为数组,{“x”: [“a“,“b”,”c”]} |
内嵌文档 | 文档可以嵌套其他文档,被嵌套的文档作为值来处理,{“x”:{“y”:3 }} 对象Id:对象id是一个12字节的字符串,是文档的唯一标识,{“x”: objectId() } |
二进制数据 | 二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非utf-字符保存到数据库中,二进制数据是唯一的方式。 |
代码 | 查询和文档中可以包括任何JavaScript代码,{“x”:function(){/…/}} |
二、mongoDB.msi安装到win10本地
http://www.manongjc.com/article/5554.html
要将Mongo 安装的bin目录路径设置到环境变量,这样,在win+r打开黑窗口的时候输入mongo会直接连上mongo数据库
三、mongo的常用命令
1.查询所有的数据库:show databases
2.查询语句:db.集合名.find()
3.创建数据库:
方式一:
use 要创建数据库的名字——>db.createCollection(name, options)(name: 要创建的集合名称,options: 可选参数, 指定有关内存大小及索引的选项)
方式二:
use 要创建数据库的名字———>db.要创建集合的名字.insert({})(直接假定一个集合并往里面添加数据即可)
4.根据某条件查询
db.集合名.find({"a":"b"}),查询属性a=b的文档(记录),属性a的引号可要可不要
5.根据条件只查询其中的一条数据
db.集合名.findOne({a:"b"})
6.查询数据前n条数据
db.集合名.find().limit(n)
7.修改某条记录的一个属性值,其它值不改变
db.spit.update({_id:"1"},{visits:NumberInt(1000)}) ——>这个修改会使visits的其它属性消失
正确的修改方式:
db.spit.update({_id:"2"},{$set:{visits:NumberInt(2000)}})
8.删除集合里的某条记录
db.集合名称.remove(条件)
9.删除当前表
db.dropDatabase()
10.查询当前库中的所有集合
show collections
11.统计记录数
db.集合名.count()——>查询集合的所有记录数
db.集合名.count({a:"b"})——>统计符合此条件的所有记录数
12.模糊查询
db.spit.find({content:/流量/})——>内容里面包含”流量“字段
db.spit.find({content:/^加班/})——>内容以”加班“开头
db.spit.find({content:/加班^/})——>内容以”加班“结尾
db.spit.find({name:/XXX/i})——>忽略大小写
13.比较操作查询
db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value
db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value
db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value
14.包含与不包含查询
db.spit.find({userid:{$in:["1013","1014"]}})
db.spit.find({userid:{$nin:["1013","1014"]}})
15.条件连接查询
and查询
db.spit.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})——>查询吐槽集合中visits大于等于1000 并且小于2000的文档
or查询
db.spit.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})——>查询吐槽集合中userid为1013,或者浏览量小于2000的文档记录
16.在原值上进行增减
db.spit.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )