介绍
MongoDB 是一个面向集合的,模式自由的文档型数据库.
1 面向集合, 意思是数据被分组到若干集合,这些集合称作聚集(collections). 在数据库里每个聚集有一个唯一的名字,可以包含无限个文档. 聚集是RDBMS(关系型数据库管理系统)中表的同义词,区别是聚集不需要进行模式定义.
2模式自由, 意思是数据库并不需要知道你将存入到聚集中的文档的任何结构信息.实际上,你可以在同一个聚集中存储不同结构的文档.
3 .文档型, 意思是我们存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档. 我们把这个数据格式称作 "[BSON]" 即 "Binary Serialized dOcument Notation."
4.存贮:MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。
Mongodb结构图
[url]http://dl.iteye.com/upload/picture/pic/70632/8224c15f-ea03-3f76-a51c-4d714ea3efcf.png[/url]
MongoDB 运行概述
MongoDB 是一个服务器进程可以运行在 Linux, Windows 和OS X等操作系统. 支持 32 和 64位模式,我们推荐使用64位模式,因为在32位模式下Mongo的数据库大小有2GB的限制.
MongoDB 进程默认情况下使用监听端口为 27017 (可以在启动时用命令行参数修改,详细信息参考 [Command Line Parameters] ).
Clients 连接 MongoDB 进程(如果安全认证系统激活的话需要进行用户认证),执行一系列的操作,比如插入,查询,更新等.
MongoDB 使用文件存储数据. (默认位置 /data/db/), 使用内存映射文件进行高效的数据管理.
MongoDB 还能配置成 [自动数据复制], 即 [自动故障切换].
有关 MongoDB 的更多管理信息,参见 [Mongo 管理指南].
MongoDB 功能
对于开发人员, MongoDB 驱动提供了丰富的操作:
• 查询:基于查询对象或者类SQL语句搜索文档. 查询结果可以排序,进行返回大小限制,可以跳过部分结果集,也可以返回文档的一部分.
• 插入和更新 : 插入新文档,更新已有文档.
• 索引管理 : 对文档的一个或者多个键(包括子结构)创建索引,删除索引等等
• 常用命令: 所有MongoDB 操作都可以通过socket传输的DB命令来执行.
下载、安装和启动
Linux 32-bit
创建数据库默认存储目录
$ mkdir -p /data/db
下载
使用curl, 获取预编译的版本
$ curl -O http://downloads.mongodb.org/linux/mongodb-linux-i686-latest.tgz
解压
$ tar xzf mongodb-linux-i686-latest.tgz
Linux下的启动
启动数据库服务器:
./mongodb-xxxxxxx/bin/mongod
mongod命令等价于mongod --dbpath=/data/db
以认证的方式启动 mongod –auth
启动mongo数据库客户端
./mongodb-xxxxxxx/bin/mongo
Windows 32-bit
创建数据库默认存储目录
创建data和db目录,比如 C:\data\db . 这是数据库文件的默认存放位置.
下载
http://downloads.mongodb.org/win32/mongodb-win32-i386-v1.6-latest.zip 并解压32位版本的.zip文件.
Windows下的启动
启动mongo数据库服务器
启动命令行并运新,mongodb-xxxxxxx\bin\mongod.exe
启动mongo数据库客户端:
启动 bin\mongon.exe
Mongo客户端常用命令
数据库相关命令
show dbs // 列出所有数据库
use memo // 使用数据库memo。即使这个数据库不存在也可以执行,但该数据库不会立刻被新建,要等到执行了insert之类的操作时,才会建立这个数据库
show collections // 列出当前数据库的collections
查看各collection的状态 db.printCollectionStats()
db // 显示当前数据库
show users // 列出用户
db.system.users.find() // 列出用户
db.removeUser('user1') //删除用户
collection db.c1.drop()//删除集合c1
db.dropDatabase()//删除当前的数据库
安全与认证
use shine // 如果要root权限,就用admin库
db.addUser("username", "password") // 普通权限,可读写
db.addUser("username", "password", true) // 只可读,不可写
db.system.users.remove({user: username}) // 删除用户
保存数据
db.c1.save({name:"zhangsan",age:18}) //没有写主键,系统会自动生成一个主键,主键名为_id,
对象id(文档对象id)
每个MongoDB的document都有一个_id字段作为它的第一个属性,这个值通常是一个BSON对象id,因此,这个id对于集合中的每个成员都是唯一的,如果用户插入一个document没有提供一个id,数据库将自动生成一个id,并存储在_id字段。
The BSON ObjectId Datatype
一个BSON ObjectID是由12个字节组成:4字节时间+3字节机器id+2字节进程id+3字节的数字
0 1 2 3 4 5 6 7 8 9 10 11
time machine pid inc
注:我们没有创建集合,数据库在第一次插入的时候自动创建
2. db.c1.save({_id:1,name:"lisi",age:22})//自己填写id主键值,id主键值可以是字符串类型,也可以是数字类型
3. db.c1.save({"name" : "MongoDB","type" : "database","count" : 1,"info" : {x : 203,y : 102}})
保存更加复杂的数据
创建索引:
coll.ensureIndex({productid:1}) // 在productid上建立普通索引
coll.ensureIndex({district:1, plate:1}) // 多字段索引
coll.ensureIndex({productid:1}, {unique:true}) // 唯一索引
coll.ensureIndex({productid:1}, {unique:true, dropDups:true|) // 建索引时,如果遇到索引字段值已经出现过的情况,则删除重复记录
coll.getIndexes() // 查看索引
coll.dropIndex({productid:1}) // 删除单个索引
查询
1. coll.find() // select * from coll
2. coll.find().limit(10) // select * from coll limit 10
3. coll.find().sort({x:1}) // select * from coll order by x asc
4. coll.find().sort({x:-1}) // select * from coll order by x desc
5. coll.find().sort({x:1}).skip(5).limit(10) // select * from coll order by x asc limit 5, 10
6. coll.find({x:10}) // select * from coll where x = 10
7. coll.find({x: {$lt:10}}) // select * from coll where x <= 10
8. coll.find({}, {y:true}) // select y from coll
9. 通过游标访问数据
> var cursor = db.collect1.find();
> while(cursor.hasNext()) printjson(cursor.next())
//当数据超过20行时候,使用it命令查看更多数据
10. 通过forEach
> db.collect1.find().forEach(printjson)
11. 在mongo shell中,你可以将游标认为是数组
> var cursor =db.collect1.find();
> printjson(cursor[4])
{ "_id" : ObjectId("4c691e72ed2a47b462dfa806"), "x" : 4, "y" : 3 }
使用这种方式存取需要注意的是,在cursor[4]之前的所有数据都会同时被加载到内存,对于很大的结果集,这样操作是不恰当的,会导致内存溢出,当查询巨大数据量大时候,游标应当作为迭代器使用。
SQL语句不能做到的,mongo也可以做到
1. coll.find({"address.city":"gz"}) // 搜索嵌套文档address中city值为gz的记录
2. coll.find({likes:"math"}) // 搜索数组
3. coll.ensureIndex({"address.city":1}) // 在嵌套文档的字段上建
更新
1. db.user.update({uid:1},{$set:{age:26}}) //update user set age=26 where uid=1
2. db.user.update({uid:1},{$inc:{age:1}}) //update user set age=age+1 where uid=1
删除
db.user.delete({uid:1})//delete user where uid=1
数据导出、导入:
1. // json或csv格式,每次一个collection
2. mongoexport -d producttrade -c basic -o /home/data/mongo_backup/producttrade_100504.json
3. mongoimport -d producttrade -c basic --drop /home/data/mongo_backup/producttrade_100504.json
4.
5. // 二进制数据格式,常用于备份、还原
6. mongodump -d shine -o /home/data/mongo_backup
7. mongorestore -d shine --drop /home/data/mongo_backup/shine
开发指南:
1.数据库连接:
标准的连接格式:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/database]
mongodb://是一个必须的前缀标识,表明是一个标准的连接格式
username:password@可选,如果给定,驱动连接数据库后,将使用该用户名和密码登录数据库
host1这是uri部分必须要的,它标明需要连接到那个服务器地址
:portX是一个可选项,不提供,缺省使用27017端口
/database需要登录的数据库名,如果使用了username:password@符号,不提供,默认使用admin数据库
连接池:服务器为每一个tcp连接使用一个线程,因此,建议你的应用使用数据库连接池
2.数据库
每个mongoDb服务可以支持多个数据库,每个数据库都是独立的,每个数据库中的数据都是分开存储的,既安全,又易于管理。
一个数据库是由多个集合组成,每个集合又是文档(document)对象组成
相关命令:
3.集合
集合的名字必须开始与字母或者下划线,$是保留字,集合能够组织在一个命名空间中,通过.符号命名集合组,例如:你可以定义集合blog.posts和blog.authors,这两个集合都属于bolg下的;集合名字最大长度是128个字符(包括数据库的名字和索引),通常最好保持在80/90字符一下。
mongo经常会用到哪里
mongo相比较关系数据库,在于查询速度快,对并发支持的比较好,数据量很大,也不怎么影响速度,但mongo的相对查询比较简单,所以适合将一些数据查询比较简单但频繁,更新操作比较频繁,数据量比较大的信息放入到mongo库中
分享到:
相关推荐
sudo vim /etc/yum.repos.d/mongodb-org-4.2.repo 写入: [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpg...
MongoDB是一种流行的开源、分布式文档数据库,常被用于构建高性能、可扩展的应用程序。这个“mongodb-测试数据”压缩包显然包含了一些用于测试MongoDB功能的样例数据集,特别是针对增、删、改、查(CRUD)操作的学习...
/usr/local/mongodb/mongodb-linux-2.0.7/bin/mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/mongodb-linux-2.0.7/logs/mongodb.log --logappend --port=27017 --fork 知识点 6:配置...
Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...
MongoDB 实验报告 本实验报告旨在详细介绍 MongoDB 的安装、配置和基本操作步骤,本报告基于 CentOS 7 系统,通过一步一步的截图和文字说明,帮助读者快速掌握 MongoDB 的使用。 一、安装 MongoDB 首先,我们需要...
MongoDB之conf配置文件详解 MongoDB的配置文件是服务器的核心组件之一,它控制着MongoDB服务器的各种设置和行为。在本文中,我们将详细介绍MongoDB的配置文件的各个部分,并解释每个设置的作用和意义。 一、数据库...
MongoDB 是一个流行的开源、基于分布式文件存储的数据库系统,主要设计用于处理大量数据的分布式环境。C# 驱动是 MongoDB 提供的一种客户端库,允许 .NET 开发者与 MongoDB 数据库进行交互。标题提到的是 MongoDB 的...
MongoDB是一个开源、分布式、高性能的NoSQL数据库,以其灵活性、可扩展性和高可用性而闻名。`mongodb.dll`是MongoDB数据库系统在Windows平台上运行所必需的一个动态链接库(DLL)文件,它包含了MongoDB客户端和...
Geoserver发布MongoDB矢量数据地图服务 Geoserver是一款功能强大且开源的地理信息系统(GIS)服务器,能够实现空间数据的存储、处理和发布。MongoDB是一款NoSQL数据库,能够存储大量的矢量数据。本文将介绍如何使用...
资源名称:MongoDB应用设计模式内容简介:无论是在构建社交媒体网站,还是在开发一个仅在内部使用的企业应用程序,《MongoDB应用设计模式》展示了MongoDB需要解决的商业问题之间的连接。你将学到如何把MongoDB设计...
MongoDB Community Server(mongodb-org-server_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
MongoDB是一款高性能、无模式的分布式文档型数据库,被广泛应用于大数据分析、内容管理系统、物联网(IoT)、实时应用程序和地理位置数据存储等场景。在Linux环境下安装MongoDB 4.2.21版本,是许多系统管理员和开发者...
MongoDB Community Server(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)适用于Ubuntu 18.04 Arm芯片, MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决...
MongoDB是一个流行的开源、分布式文档型数据库,设计用于处理大量数据并提供高可用性和高性能。在Java应用程序中,为了与MongoDB进行交互,我们需要使用Java MongoDB驱动程序。这个压缩包包含的就是Java连接MongoDB...
MongoDB Community Server(mongodb-src-r5.0.4.tar.gz)源代码 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非...
MongoDB是一种流行的开源、分布式文档型数据库,以其灵活性、高性能和可伸缩性而闻名。在C#开发环境中,MongoDB提供了专门的C#驱动程序,使得开发者能够方便地与MongoDB进行交互。本篇文章将深入探讨MongoDB的C#驱动...
MongoDB 是一个流行的开源文档型数据库,被广泛用于存储、管理和检索非结构化或半结构化数据。在本文中,我们将深入探讨如何在基于ARM架构的Ubuntu 18.04系统上安装和使用MongoDB。 一、ARM架构与Ubuntu 18.04 ARM...
MongoDB是一种分布式文档数据库,以其灵活性、高性能和可伸缩性而闻名,尤其适用于处理大量半结构化和非结构化数据。MongoDB Day 2015 深圳活动显然是一个专门针对MongoDB技术的研讨会或会议,旨在深入探讨和分享...
MongoDB是一款开源、高性能、无模式的文档型数据库,它在现代应用程序开发中扮演着重要的角色,特别是在处理大量非结构化数据时。针对"mongodb Windows7 64位"这个主题,我们将深入探讨MongoDB在Windows 7 64位操作...
MongoDB 是一个高性能、分布式、开源的文档型数据库系统,被广泛应用于Web应用程序、移动应用后端、大数据分析以及物联网(IoT)等场景。它以其灵活的数据模型、高可用性和可扩展性著称,是NoSQL数据库领域的代表之一...