MongoDB中文社区:http://www.mongoing.com
 
 
数据库的使用场景
SQL(关系型数据库):MySQL、SQLServer  ---》磁盘操作
1.高度事务性的场景,银行、会记、贸易、库管,需要大量原子性操作
2.数据存在要求有规范的多表结构设计,遇到义明确的字段
3.数据价值高,对安全和稳定性要求高
4.需要持久化存储的“冷数据”(不需要经常读写的数据)
 
NoSQL(非关系型数据库):Redis、MongoDB-----》内存操作,读写块
Redis: 键值对形式存储, key:value(string、list、hash、set、zset)
MongDb:字典的形式存储{key: value1,key2:value}, {key1,value1}
1.高度收缩性场景:社交网络、热点资讯
2.灵活的数据结构,不需要实现设计数据库数据表字段,即用即存
3.处理“热数据”(需要经常读写的数据),NoSQL大部分操作都是和内存交互,读写效率极高
4.更容易扩展,支持集群
 
MongDB数据库特点:
  • 模式自由 :可以把不同结构的文档存储在同一个数据库里
  • 面向集合的存储:适合存储 JSON风格文件的形式,
  • 完整的索引支持:对任何属性可索引,
  • 复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移。
  • 自动分片:支持水平的数据库集群,可动态添加额外的机器。
  • 丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组。
  • 快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划。
  • 高效的传统存储方式:支持二进制数据及大型对象(如图片等...)。

MongoDB的安装与使用

下载mongodb的版本,两点注意

  1. 根据业界规则,偶数为稳定版,如3.2.X;奇数为开发版,如3.3.X
  2. 32bit的mongodb最大只能存放2G的数据,64bit就没有限制
sudo apt-get install -y mongodb-org

2.配置操作:
    查看帮助:mongod --help
    启动:sudo service mongod start
    停止:sudo service mongod stop
    重启:sudo service mongod restart
    查看是否启动成功:ps ajx|grep mongod
    查看配置文件:vim /etc/mongdod.conf
    默认端口:27017
    日志的位置:/var/log/mongodb/mongod.log

客户端mongo

启动本地客户端:mongo

查看帮助:mongo –help

退出:exit或者ctrl+c

mongodb服务端

MongoDB 默认的存储数据目录为 /data/db,默认端口27017
  • 服务的命令为mongod,可以通过help查看所有参数
    mongod --help
  • 相关文件存放路径:默认各个文件存放路径如下所示:
  • 可执行文件存放路径:/usr/bin/mongod 和 /usr/bin/mongo
  • 数据库文件存放路径:/data/db
  • 日志文件存放路径:/var/log/mongodb/mongod.log
  • 配置文件存放路径:/etc/mongod.conf

启动注意事项:

1. 首次启动:

  • 启动MongoDB服务: sudo mongod

报出如下错误,表示默认的存储数据目录 /data/db 不存在:

[initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating

  • 创建 /data目录和 /data/db 目录,并指定 读/写/执行 权限
sudo mkdir -p /data/db
sudo chmod 777 /data/db

2. 再次启动:

  • 再次启动MongoDB服务: sudo mongod

启动成功,但是可能会有如下警告:

#### 此乃 Warning 1:
[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
[initandlisten] ** We suggest setting it to 'never'
[initandlisten]
[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
[initandlisten] ** We suggest setting it to 'never' #### 此乃 Warning 2:
[initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files. #### 此乃 Warning 3:
[initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

服务端mongodb无法启动的解决方法

sudo mongod --config /etc/mongod.conf &
 
MongoDB 主要命令
1.开启数据库服务:sudo mongod
2.开始shell客户端:mongo
3.关闭 shell客户端 和 数据库服务,exit 或 ctrl + c
4.在admin数据库下,通过db.shutdownServer()来关闭服务
sudo mongo  --auth:开启用户权限验证模式
mongo shell
 
 
查看进程
pa aux|grep mongoDB
 
端口:
MySQL:3306    Redis:6379     MongDB:27017
 
 -------------->常见命令
1. 表示当前所在的数据库
> db
 
2. 查看所有的数据库
> show dbs
 
3. 切换到指定数据库
> use 数据库名
 
4. 查看当前数据库下的所有集合(相当于SQL的表)
> show collections
 
5. 查看当前数据库下 指定集合 的所有文档(相当于 每一条数据)
> db.mycollection.find()
 
6. 删除当前数据库的 指定集合
> db.mycollection.drop()
 
7. 删库
> db.dropDatabase()
 
 -------------->MongoDB 的 用户权限:
1. 第一次进入到MongoDB没有用户,所以是root权限,
    需要先创建一个有root权限的用户:
    > use admin
    > db.createUser()
 
    在使用这个用户创建其他用户
    > db.auth()
 
2. 第二次开启MongoDB服务,要通过 --auth 启动用户权限模式,才可以让用户权限生效。
    > use admin
    > db.auth()
 
创建用户(在admin下),权限有root,读r 写w
db.createUser({user : "python",pwd:123456, roles : ["root"]})
 
登录到认证用户中:
db.auth("python","123456")
 
查看当前认证登录的用户信息
show users
{
"_id" : "admin.python",
"user" : "python",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
查看当前数据库下所有的用户信息
db.system.users.find()
 
删除用户
db.dropUser(:"bigcat")   返回True
 
mongodb小驼峰写法,一个单词小写,两个单词第一个单词小写,第二个单词大写
roles:[{db:"数据库名",:”权限(root/rw)“} ]
 
切换用户先进入admin中
use admin
 

5、从指定主机上克隆数据库
    db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库

6、从指定的机器上复制指定数据库数据到某个数据库
    db.copyDatabase(“mydb”, “temp”, “127.0.0.1”);将本机的mydb的数据复制到temp数据库中

7.、当前db版本
    db.version();
创建数据库直接use  库名,当数据库内容为空时不显示。这时需要插入数据
8、查看当前db的连接服务器机器地址
            db.getMongo();
 
------------------ MongoDB 增加数据 : insert
1. insert() 接收一个文档 参数
db.stu.insert({_id:1,name:"诸葛亮",age:36,home:"蜀国"})
2. 构建空文档,添加字段,再写入
> data = {}
> data._id = 2
> data.name = "刘备"
> data.age = 48
> data.hometown = "蜀"
db.stu.insert(data)
 
查看当前数据库所有集合: show collections
查看当前集合内容: db.集合名.find()
------------------ MongoDB 删除数据 : remove
 
1. 删除所有符合条件的文档,也可以同时指定多个条件
> db.stu.remove({"age" : 18})
> db.stu.remove({"age" : 18, "hometown" : "蜀"})
 
2. 只删除第一个符合条件的文档,通过添加第二个参数 {justOne : true}
> db.stu.remove({"age" : 18}, {justOne : true})
 
3. 不添加任何条件,则删除全部文档
> db.stu.remove()
> db.stu.drop()
 
------------------ MongoDB 修改数据 : update
 
update() 至少需要两个参数,第一个参数为匹配条件,第二个参数为修改内容(可添加第三个参数表示是否全部匹配)
 
1. 将第一个符合条件的文档,替换为 第二个参数对应的文档(整个文档替换)
# 将第一个 age 为48的文档,替换为 {age : 49}, 但是 _id 保持不变
> db.stu.update({age : 48}, {age : 49})   ————》除了id,age,其他内容都没有了
 
2. 如果只修改特定字段,通过 $set 修饰符处理 (局部文档修改)
# 将第一个age为48的文档,修改age为49,其他字段保持不变
> db.stu.update({age : 48}, {$set : {age : 49}})
 
# 将第一个age为48的文档,修改age为49,并添加gender字段,其他字段保持不变
> db.stu.update({age : 48}, {$set : {age : 49, gender : 男}})
 
 
3. 默认只处理第一条符合条件的文档,通过第三个参数 {multi : true} 表示全部处理 (修改所有文档)
# 将所有age为48的文档,修改age为49,其他字典不变
> db.stu.update({age : 48}, {$set : {age : 49}}, {multi : true})
 
------------------ MongoDB 新增+修改数据 : save
 
save() 需要一个文档参数,根据文档的 _id 来处理,
 
1. 如果_id 存在,则修改数据,
> db.stu.save({_id : 1, name : "马超", age : 36, hometown : "蜀"})
 
2. 如果_id 不存在则新增
db.stu.save({_id : 5, name : "黄忠", age : 56, hometown : "蜀"})
 
insert() 如果_id存在则报错, save则修改数据
update() 修改数据可以指定字段修改,save则全部替换。
# pip install pymongo
mongo与python交互
import pymongo
client = pymongo.MongoClient(host='127.0.0.1', port=27017)
client.test.stu.insert({})
client.test.stu.insert([{}, {}, {}])  -----》这里加入多条数据要用中括号
client.test.stu.find({})
 
------------------ MongoDB 查询数据 : find()
 
1. find() 和 findOne()
find() 查询所有符合条件的文档
findOne() 查询第一个符合条件的文档
 
db.stu.find({age:18}).pretty()
pretty():张开,不让数据一行显示
 
> db.stu.find({age : 18, hometown : "桃花岛"})
> db.stu.findOne({age : 18})
 
2. 比较运算符(通常用于比较数据,如果是字符串则比较字节码)
 
默认是 等于
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
 
> db.stu.find({age : 18})
> db.stu.find({age : {$gt : 18}})
 
3. 逻辑运算符(用于表示多个 独立条件的逻辑关系)
 
$and 和 $or 用来修饰多个条件的 数组
默认是与
> db.stu.find({age : 18, hometown : "桃花岛"})
> db.stu.find( {$or : [{age : 18}, {hometown : "桃花岛"}]})
 
> db.stu.find( {$or : [ {$and : [{age : 18}, {hometown : "桃花岛"}]}, {gender : true}]})
 
4. 范围运算符
 
$in 在
$nin 不在
 
# 查找age 不是 16 18 20 的文档信息
db.stu.find({age : {$nin : [16, 18, 20]}})
 
# 查找age 是 16 18 20 , 同时 hometown 是 蒙古 或 大理
db.stu.find({age : {$in : [16, 18, 20]}, hometown : {$in : ["蒙古", "大理"]}})
 
5. 正则表达式
# 按正则表达式匹配文档, / / 内写的正则表达式匹配文本
db.stu.find({name : /^黄/})
 
# 通过 $regex修饰 启动正则匹配文本
db.stu.find({name : {$regex : "^黄"}})
 
# 通过 $options 启动正则修饰 ,如 $i 表示 忽略英文大小写
db.stu.find({name : {$regex : "^Big", $options : "$i"}})
 
6. 自定义函数查询 $where (了解)
db.stu.find({$where : function() { return this.age != 20 }
 
-------------->集合命令
创建集合
    db.createCollection(name,options)
查看当前数据库的集合
show collections

mongodb的安装与简单操作的更多相关文章

  1. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用

    python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...

  2. 【ZooKeeper】ZooKeeper安装及简单操作

    ZooKeeper介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一 ...

  3. MongoDB下载安装与简单增删改查

    Windows下MongoDB的安装和配置.启动和停止 下载地址:MongoDB的官方下载网址是:https://www.mongodb.org/downloads 安装步骤1. 点击下载的mongo ...

  4. storm安装以及简单操作

    storm的安装比较简单,下面以storm的单节点为例说明storm的安装步骤. 1.storm的下载 进入storm的官方网站http://storm.apache.org/,点击download按 ...

  5. MySQL安装和简单操作

    MySQL数据库安装与配置详解 MySQL的安装请参考下面这篇博客,讲述的非常详细,各种截图也很清晰.http://www.cnblogs.com/sshoub/p/4321640.html MySQ ...

  6. MongoDB快速入门学习笔记2 MongoDB的概念及简单操作

    1.以下列举普通的关系型数据库和MongoDB数据库简单概念上的区别: 关系型数据库 MongoDB数据库 说明 database database 数据库 table collection 数据库表 ...

  7. RabbitMQ安装以及简单操作应用(针对Windows和C#)

    1.RabbitMQ安装 1.1下载并安装Erlang https://www.erlang.org/downloads 一直点next就安装好了.我直接使用了默认的安装目录.否则的话,应该需要配置一 ...

  8. MongoDB的安装及CURD操作

    MongoDB的下载地址:http://www.mongodb.org/downloads MongoDB有32bit和64bit两个版本,32bit只能存放2GB数据.我们选择64bit版进行下载. ...

  9. MongoDB的安装与python操作MongoDB

    一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...

随机推荐

  1. Tomcat配置JVM运存

    setenv.bat set "JAVA_OPTS=-server -Xms256M -Xmx1024M -XX:PermSize=256m -XX:MaxPermSize=1024m&qu ...

  2. Ruby Time类和Date类

    Time类 更新: 2017/06/23 更新了Data/Time在model模式下的便利方法 更新: 2018/10/12 修改了%Y相关描述防止误解  年月日时分秒,时区    生成  获取当前时 ...

  3. java中jsp页面的css资源定位---备忘录

    1:同级目录下(应该是相对定位) web-inf下的内容是不对外开放的/安全的,不能通过url直接访问.已避免非法人员通过url自己操作一些比较私密的文件信息. 能在sevlet(或者spring的c ...

  4. HDU2604:Queuing(矩阵快速幂+递推)

    传送门 题意 长为len的字符串只由'f','m'构成,有2^len种情况,问在其中不包含'fmf','fff'的字符串有多少个,此处将队列换成字符串 分析 矩阵快速幂写的比较崩,手生了,多练! 用f ...

  5. Codeforces Round #259 (Div. 1)A(公式)

    传送门 题意 给出m个面的骰子扔n次,取最大值,求期望 分析 暴力算会有重复,而且复杂度不对. 考虑m个面扔n次得到m的概率,发现只要减去(m-1)个面扔n次得到m-1的概率即可,给出example说 ...

  6. [App Store Connect帮助]八、维护您的 App(2)将 App 从 App Store 中移除

    如果您不想继续向顾客提供您的 App,您可以将其从 App Store 中移除,这样会移除该 App 的所有版本.拥有该 App 先前版本的用户将无法更新 App,但只要您的合约有效,用户便仍可下载最 ...

  7. (DP ST表 线段树)51NOD 1174 区间中最大的数

    给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少.   例如: 1 7 6 3 1.i = 1, j = 3,对应的数为7 6 3,最大的数为7. ...

  8. C#中的预编译指令介绍[转]

    原文链接 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值 ...

  9. SQL SELECT DISTINCT 语句 用法

    SQL SELECT DISTINCT 语句 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值. 语法 ...

  10. fix for 12c profile

    .for CDBS run as sysDBa CREATE OR REPLACE FUNCTION verify_function (username varchar2, password varc ...