MongoDB(一)-- 简介、安装、CRUD
一、Mongodb简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
二、主要特点
- MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
- MongoDB安装简单。
三、安装
1.下载
根据自己Linux的版本下载对应的mongodb,下载地址:https://www.mongodb.com/download-center#community,下载到 /usr/java 路径下。
2.创建数据库文件路径和数据库日志路径
1) 进入到java路径下,cd /usr/java/
2) 创建mongodbNode文件夹,mkdir mongodbNode
3) 在mongodbNode下,创建data和log文件夹,其中data是存mongodb数据的文件夹,log是存mongodb日志的文件夹
mkdir data log
4) 进入data文件,在data下创建db文件夹,mongodb会将数据文件写到db文件夹下,
mkdir db
3.启动mongodb服务端,有两种方式
1) 命令行方式启动(启动方便),进入到bin目录下(可以通过 ./mongod --help 来查看 mongodb 服务端启动的参数):
./mongod --dbpath /usr/java/mongoNode/data/db --logpath /usr/java/mongoNode/log/mongodb.log --fork --bind_ip 192.168.242.129 --port 27017 --journal
当看到以下信息的时候,则说明启动成功:
当然,我们也可以通过查看后台进程的方式 检查mongodb是否启动成功:netstat -anp|grep mongod
2) 配置文件方式启动(管理起来规范)
a. 在cd /usr/java/mongoNode 下新建一个文件:touch mongodb.conf
b. 编辑文件,vi mongodb.conf
c. 在mongodb.conf中添加如下内容:
dbpath=/usr/java/mongoNode/data/db
logpath=/usr/java/mongoNode/log/mongodb.log
logappend=true
fork=true
bind_ip=192.168.242.129
port=27017
d. 将mongodb设置成环境变量:export PATH=/usr/java/mongodb/bin:$PATH
e. 查看环境变量是否生效:echo $PATH
f. 启动:mongod --config mongodb.conf
4.启动mongodb客户端
命令行方式:./mongo --host 192.168.242.129 --port 27017
配置文件方式:mongo --host 192.168.242.129 --port 27017
四、配置文件
# 日志文件位置
logpath=/var/log/mongo/mongod.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
# 默认27017
#port = 27017
# 数据库文件位置
dbpath=/var/lib/mongo
# 启用定期记录CPU利用率和 I/O 等待
#cpu = true
# 是否以安全认证方式运行,默认是不认证的非安全方式
#noauth = true
#auth = true
# 详细记录输出
#verbose = true
# Inspect all client data for validity on receipt (useful for
# developing drivers)用于开发驱动程序时验证客户端请求
#objcheck = true
# Enable db quota management
# 启用数据库配额管理
#quota = true
# 设置oplog记录等级
# Set oplogging level where n is
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#diaglog=0
# Diagnostic/debugging option 动态调试项
#nocursors = true
# Ignore query hints 忽略查询提示
#nohints = true
# 禁用http界面,默认为localhost:28017
#nohttpinterface = true
# 关闭服务器端脚本,这将极大的限制功能
# Turns off server-side scripting. This will result in greatly limited
# functionality
#noscripting = true
# 关闭扫描表,任何查询将会是扫描失败
# Turns off table scans. Any query that would do a table scan fails.
#notablescan = true
# 关闭数据文件预分配
# Disable data file preallocation.
#noprealloc = true
# 为新数据库指定.ns文件的大小,单位:MB
# Specify .ns file size for new databases.
# nssize =
# Replication Options 复制选项
# in replicated mongo databases, specify the replica set name here
#replSet=setname
# maximum size in megabytes for replication operation log
#oplogSize=1024
# path to a key file storing authentication info for connections
# between replica set members
#指定存储身份验证信息的密钥文件的路径
#keyFile=/path/to/keyfile
五、数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
"show dbs" 命令可以显示所有数据的列表。
运行"use"命令,可以连接到一个指定的数据库。
六、文档
文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
需要注意的是:
1、文档中的键/值对是有序的。
2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
3、MongoDB区分类型和大小写。
4、MongoDB的文档不能有重复的键。
5、文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
七、集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
八、操作(CURD)
1.连接到客户端
2.查看数据库:show dbs
3.新建数据库:use testXbq,此时,show dbs不会有刚刚新建的数据库,当向数据库中 新建连接时 或者 直接插入文档 时,才会出现 testXbq数据库。
1) 查看当前使用的数据库: db.getName() 或者 db
2) 显示当前数据库的信息:db.stats()
3) 修复当前使用的数据库:db.repairDatabase()
4) 删除当前使用的数据库:db.dropDatabase()
5) 从指定的机器上复制指定数据库数据到某个数据库:db.copyDatabase("mydb", "temp", "127.0.0.1"); --将本机的mydb的数据复制到temp数据库中
6) 查看当前db的链接机器地址:db.getMongo()
7) 当前db版本:db.version()
8) 查看当前数据库中的所有连接:show collections
4.插入文档,向刚刚创建的连接中 插入文档:db.xbqTable.insert({name:"xbq",sex:"男"}),也可以使用 save方法
5.查询总的的文档:db.xbqTable.find() ,若想要 格式化查询结果,在find()后面加上 .pretty() 即可,如:db.xbqTable.find().pretty()
6.更新文档,修改刚刚插入的文档:db.xbqTable.update({ "_id" : ObjectId("58e40c02aee532ffbea0b89d")},{$set:{name:"徐邦启"}})
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
重新插入几条文档:
更新name为xbq的文档,并将age更新为 24,db.xbqTable.update({name:"xbq"},{$set:{age:24}},{multi:true})
7.删除文档,删除name为 徐邦启的文档:db.xbqTable.remove({name:"徐邦启"})
8.and查询,查询 name 为xbq,并且 address 为 广东深圳 的 文档:db.xbqTable.find({name:"xbq",address:"广东深圳"})
9.or查询,查询 name 为joe 或者 name为 java的文档:db.xbqTable.find({$or:[{name:"joe"},{name:"java"}]})
10.<,<=,> ,>= ,<>
总文档有:
1) 查询age < 15的文档:db.xbqTable.find({age:{$lt:15}})
2) 查询age <= 15的文档:db.xbqTable.find({age:{$lte:15}})
3) 查询age>15的文档:db.xbqTable.find({age:{$gt:15}})
4) 查询年age>=15的文档:db.xbqTable.find({age:{$gte:15}})
5) 查询age != 15的文档:db.xbqTable.find({age:{$ne:15}})
11.模糊查询,查询 name 中包含 o 的文档:db.xbqTable.find({name:/o/});
相当于 select * from xbqTable where name like '%o%';
12.模糊查询,查询name中以 t 开头的文档:db.xbqTable.find({name:/^t/})
相当于 select * from xbqTable where name like 't%';
13.查询指定列 name 和 sex 的数据:db.xbqTable.find({},{name:1,sex:1}) 或者 db.xbqTable.find({},{name:true,sex:true})
相当于 select name,sex from xbqTable;
写 0 或者 false ,则为 排除此列,查询 除了此列的 其他数据
14.查询指定列 name 和 sex的数据,并且 age > 16 的文档:db.xbqTable.find({age:{$gt:16}},{name:1,sex:1})
15.查询去重:db.xbqTable.distinct("sex")
相当于:select distinct(sex) from xbqTable;
16.按照age 排序:
升序:db.xbqTable.find().sort({age:1})
降序:db.xbqTable.find().sort({age:-1})
17.查询前2条的文档:db.xbqTable.find().limit(2)
18.查询3条后的文档(跳过前3条的文档):db.xbqTable.find().skip(3)
19.查询在2--4之间的文档(即先跳过前2条,然后再查询2条)(用于分页查询,limit是pageSize,skip是 第几页 * pageSize):
db.xbqTable.find().skip(2).limit(2)
20.查询第1条的文档:db.xbqTable.findOne() 或者 db.xbqTable.find().limit(1)
21.查询 name 为 xbq的文档数目:db.xbqTable.find({name:"xbq"}).count();
22.分组
九、索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
例如:db.xbqTable.ensureIndex({name:1},{background:true}),意思是 在name字段上建立一个升序的索引。
MongoDB(一)-- 简介、安装、CRUD的更多相关文章
- MongoDB数据库简介及安装
一.MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自"humongous",是一种开源 ...
- MongoDB第一天(MongoDB的简介和安装)
MongoDB 简介 什么是 MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++语言编写.在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...
- MongoDB入门简介
MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...
- Linux系统下MongoDB的简单安装与基本操作
这篇文章主要介绍了Linux系统下MongoDB的简单安装与基本操作,需要的朋友可以参考下 Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备 ...
- Python 3 mysql 简介安装
Python 3 mysql 简介安装 一.数据库是什么 1. 什么是数据库(DataBase,简称DB) 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据 ...
- MongoDB(一)——简介
这两天简单学习了一下MongoDB数据库,属于NoSQL类型数据库的一种,先简单宏观的看一下NoSQL的相关知识和MongoDB的基础知识. NoSQL是Not Only SQL的缩写,它指的是非关系 ...
- MongoDB系列---入门安装操作
MongoDB 学习大纲: 1.MongoDB简介与其它数据库对比以及数据类型 2.MongoDB安装 3.MongoDB简单操作 环境要求: Linux 一.MongoDB简介 1 什么是Mongo ...
- MongoDB Windows环境安装及配置
MongoDB一般安装 1.首先到官网(http://www.mongodb.org/downloads )下载合适的安装包,目前的最新版本为2.6 安装包有zip和msi格式的,这里推荐下载zip格 ...
- 【MongoDB】 Windows 安装
Windows下安装MongoDB,虽然网上有很多攻略,但是还是有很多坑,为了以后少犯错误,特此记录. 1.下载安装包 https://fastdl.mongodb.org/win32/mongodb ...
- MongoDB 入门之安装篇
前言:MongoDB 在各 OS 上的安装比较简单,此文章只用来记录,不考虑技术深度. 一.Ubuntu 导入 MongoDB 公钥,添该软件源文件,更新源列表 sudo apt-key adv -- ...
随机推荐
- hibernate里联合主键composite-id映射,查询单个主键的问题
今天项目中遇到这个问题,搞了大半天,现在记录下来hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbW ...
- jQuery 选择器大全总结
jQuery基础语法中规定的选择器有三种,分别是类选择器.ID选择器.标签选择器.如:$(“.aa”).$(“#id”).$(“div”),但中实际的应用中,DOM机构非常复杂,层级非常多.如和应对这 ...
- linux性能评估与分析工具
linux是一个开源系统,其内核负责管理系统的进程,内存,设备驱动程序,文件和网络系统, 决定着系统的性能和稳定性.由于内核源码很容易获取,任何人都可以将自己认为优秀的代码 加入到其中.linux默认 ...
- dac7562 应用层实现dac
/* * dac7562 (using spidev driver) * */ #include <stdint.h>#include <unistd.h>#include ...
- sendmsg/recvmsg和struct msghdr
函数原型 #include <sys/types.h> #include <sys/socket.h> ssize_t sendmsg(int sockfd, const st ...
- win7、vs2013编译webkit总结
在windows7.vs2013环境下编译webkit,本人测试成功 1.解压cygwin到C盘下(建议放在C盘更目录下,否则编译期间会有部分文件找不到) 启动命令:C:\cygwin\bin\min ...
- Windows 2008 R2组策略之二——GPO初探
与前一篇博文发表已经相去月余了,实在是有些不好意思了.感谢51CTO的大编们将小文加了推荐,这使我更加觉得自己产出太少,难于回馈大家的厚爱. 今天将这个系列的第二篇奉献给大家,以伺视听. 在上篇小文中 ...
- 缓存之 ACache
1.android缓存的介绍 Android开发本质上就是手机和互联网中的webserver之间进行通信,就必定须要从服务端获取数据.而重复通过网络获取数据是比較耗时的.特别是訪问比較多的时候.会极大 ...
- mysql 存储过程 invoker invoker
方法一:修改存储过程的definer update mysql.proc set definer='root@localhost' where db='db_name'; 方法二:修改sql secu ...
- javascript时钟代码 DEMO-002
转载自:http://www.cnblogs.com/Mygirl/archive/2012/03/30/2425832.html 正常时间显示 复制代码 <SCRIPT language=ja ...