MongoDB

Posted 刘小鹿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB相关的知识,希望对你有一定的参考价值。

一:MongoDB简介

  MongoDB是一个面向文档的数据库,而不是关系型数据库。具有更好的扩展性,MongoDB从一开始设计的时候就是奔着分布式去的,只需要简单的配置就可以实现高效的分布式存储,被大量的运用于大数据领域。并且MongoDB不再有预定义模式:文档的键(key)和值(value)不再是固定的类型和大小。

二:MongoDB与其他类型数据库的比较

  1.MongoDB与mysql:MongoDB是非关系型数据库,数据量大。而MySQL是关系型数据库,基于硬盘存储的,当并发量过大的时候,mysql可能无法支撑。

  2.MongoDB与Redis:MongoDB是最像关系型的非关系型数据库,更加适用于大数据。而Redis更倾向于并发较小,数据较小,性能更高。

三:安装

1: 4.0下载地址https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.8-signed.msi

2:安装时去除多余的组件安装提高速度

启动MongoDB,默认端口好(27017)

三:MongoDB的使用

1.首先将MongoDB的安装文件夹下的bin目录添加到环境变量里面

2.打开cmd,输入mongo

 

3.开启用户验证

   3.1在配置环境中配置安全认证

 

key都是固定的不能随便写,每一个key都有特殊含义。其中 {"role":"root"} role固定的key root是角色的名字 有可选范围如root readWrite read等。

exit退出cmd后,重启服务:

4. 登录

方式一:账号密码

方式二:游客

四:库的操作

use 数据库名称 ---->创建数据库
db.dropDatabase ---->删除数据库
show dbs  ---->查看所有数据库
use   ---->切换数据,如果不存在会自动创建,新建的数据库是查看不到的,因为里面没有数据
#创建数据库:
use 数据库名称
#如果有则切换没有则创建新的,注意的是如果如果库中没有数据show dbs 中则不显示!

# 查看数据库:
show dbs

#删除
db.dropDatabase()
#注意区分大小写

五:集合的操作

集合是一个存储数据类型的容器类比mysql中的表

#创建集合:
db.user

#查看集合:
show collections
show tables
# 同样的数据集合中没有数据则 不会显示

# 一下数据库之间没有任何关系仅仅是名字有相同部分 数据之间的关系需要应用程序维护
db.blog
db.blog.user
db.blog.common

#删除集合:
db.blog.user.drop()

六:基本数据类型

1、在概念上,MongoDB的文档与javascript的对象相近,因而可以认为它类似于JSON。JSON(http://www.json.org)是一种简单的数据表示方式:其规范仅用一段文字就能描述清楚(其官网证明了这点),且仅包含六种数据类型。

2、这样有很多好处:易于理解、易于解析、易于记忆。然而从另一方面说,因为只有null、布尔、数字、字符串、数字和对象这几种数据类型,所以JSON的表达能力有一定的局限。

3、虽然JSON具备的这些类型已经具有很强的表现力,但绝大数应用(尤其是在于数据库打交道时)都还需要其他一些重要的类型。例如,JSON没有日期类型,这使得原本容易日期处理变得烦人。另外,JSON只有一种数字类型,无法区分浮点数和整数,更别区分32位和64位了。再者JSON无法表示其他一些通用类型,如正则表达式或函数。

4、MongoDB在保留了JSON基本键/值对特性的基础上,添加了其他一些数据类型。在不同的编程语言下,这些类型的确切表示有些许差异。下面说明了MongoDB支持的其他通用类型,以及如何正在文档中使用它们

#1、null:用于表示空或不存在的字段
d={\'x\':null}
#2、布尔型:true和false
d={\'x\':true,\'y\':false}
#3、数值
d={\'x\':3,\'y\':3.1415926}
#4、字符串
d={\'x\':\'egon\'}
#5、日期
d={\'x\':new Date()}
d.x.getHours()
#6、正则表达式
d={\'pattern\':/^egon.*?nb$/i}

正则写在//内,后面的i代表模式,可省略:
i 忽略大小写
m 多行匹配模式
x 忽略非转义的空白字符
s 单行匹配模式

#7、数组
d={\'x\':[1,\'a\',\'v\']}

#8、内嵌文档
user={\'name\':\'jerry\',\'addr\':{\'country\':\'China\',\'city\':\'YT\'}}
user.addr.country

#9、对象id:是一个12字节的ID,是文档的唯一标识,不可变
d={\'x\':ObjectId()}

#案例:
db.tb.insert({"a":null,"b":1.1,"c":true,"d":100,"e":"aaaaaa","f":new Date(),"g":/^jerry.*nice$/i,"h":[1,2],"j":{"name":"smallJerry"}})

db.tb.find()
db.tb.find().pretty() # 格式化显示

七:查询数据

=============================比较运算=============================
find 查找所有匹配数据
findOne 查找第一个匹配的

# SQL:=,!=,>,<,>=,<=
# MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有数据类型
>  <  !=  >=   <=
gt lt ne gte lte
find 查找所有匹配数据
findOne 查找第一个匹配的


#1、select * from db1.user where name = "cxx";
db.user.find({\'name\':\'cxx\'})

#2、select * from db1.user where name != "cxx";
db.user.find({\'name\':{"$ne":\'cxx\'}})

#3、select * from db1.user where id > 2;
db.user.find({\'_id\':{\'$gt\':2}})

#4、select * from db1.user where id < 3;
db.user.find({\'_id\':{\'$lt\':3}})

#5、select * from db1.user where id >= 2;
db.user.find({"_id":{"$gte":2,}})

#6、select * from db1.user where id <= 2;
db.user.find({"_id":{"$lte":2}})
=============================逻辑运算=============================
# SQL:and,or,not
# MongoDB:字典中逗号分隔的多个条件是and关系,"$or"的条件放到[]内,"$not"

#1、select * from db1.user where id >= 2 and id < 4;
db.user.find({\'_id\':{"$gte":2,"$lt":4}})

#2、select * from db1.user where id >= 2 and age < 40;
db.user.find({"_id":{"$gte":2},"age":{"$lt":40}})

#3、select * from db1.user where id >= 5 or name = "cxx";
db.user.find({
    "$or":[
        {\'_id\':{"$gte":5}},
        {"name":"cxx"}
        ]
})

#4、select * from db1.user where id % 2=1;(除2余1)
db.user.find({\'_id\':{"$mod":[2,1]}})

#5、上题,取反
db.user.find({\'_id\':{"$not":{"$mod":[2,1]}}})
=============================成员运算=============================

# SQL:in,not in
# MongoDB:"$in","$nin"

#1、select * from db1.user where age in (20,30,31);
db.user.find({"age":{"$in":[20,30,31]}})

#2、select * from db1.user where name not in (\'alex\',\'yuanhao\');
db.user.find({"name":{"$nin":[\'alex\',\'yuanhao\']}})

 

以上是关于MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

mongodb关联查询

无法在 MongoDB(猫鼬)文档中追加数组

在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects

如何创建一个查询来查找 2 个数字之间的值,这些数字是 MongoDB 中的字符串类型

MongoDB GridFS