MongoDB学习笔记—02 MongoDB入门
Mongodb的基本概念
文档:是MongoDB中数据的基本单元,类似于关系型数据库中的行。
集合:多个文档组成一个集合,类似于关系型数据库中的表。
数据库:MongoDB的当个实例可以容纳多个独立的数据库,每个数据库有自己的集合和权限。
键:每个文档都有一个特殊的键”_id”,在所处的集合中是唯一的。
- 文档
多个键值对有序的放在一起便是文档,如:
{ "name":"wangdh","age":"22"}
上面的文档包含两个键name和age,其值分别是wangdh和22.
说明:
1)文档的键值对是有序的,也就是说,下面的文档与上面的文档是两个不同的文档:
{"age":"22","name":"wangdh"}
2)文档的键是字符串。
3)MongoDB不但区分类型,还区分大小写。即下面的两个文档是不同的:
{"age":"22","Age":22}
{"age":22," Age ":"22"}
4)同一个文档不能有相同的键,如下面的文档是不合法的:
{"age":"22","age":22}
- 集合
集合是一组文档,相当于关系型数据库的表。
1)集合的无模式性
无模式的意思是:一个集合中的文档可以各式各样,文档的键值对数、键值对顺序可以不一样。例如下面的文档可以存在于一个集合中:{"age":"22","Age":22}、{"name":"wangdh"}
但通过情况下,为了方便使用,一个集合往往只存放模式一致的文档。
2)子集合:通过“.”字符分开的按命名空间划分的子集合,如一个带有博客功能的应用可能包含两个集合:bolg.posts、blog.authors
- 数据库
多个文档组成集合,多个集合组成数据库。一个MongoDB实例可以承载对个数据库,每个数据库都有独立的权限控制。
注意:数据库名最终会变成文件系统里的文件。
1)内置数据库
admin:从权限角度看,相当于root数据库,要是将一个用户添加到此数据库,这个用户自动继承所有数据库的权限。
local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
config:当Mongo用于分片设置时,该数据库保存分片的相关信息。
2)命名空间
将数据库的名字放在集合面前,得到的就是集合的完全限定名,成为命名空间。例如:在test数据库中有一个blog.posts集合,则该集合的命名空间就是:test.blog.posts.命名空间的长度不得超过121字节。
- ”_id”键
MongoDB中存储的文档必须有一个”_id”键,可以是任意类型,默认是ObjectId对象。在一个集合中,每个文档都有唯一的”_id”键,来确保其唯一性。
1)ObjectId
使用12字节的存储空间,每个字节两位十六进制数,是一个24位的字符串。前4个字节是时间戳,精确到秒,接下来3个字节是所在主机的唯一标示符(通过是主机名的散列值),接下来2个字节是产生该ObjectId的进程标示符(PID)、最后3个字节是一个自动增长的计数器。
前9个字节保证了同一秒钟不同机器产生的ObjectId是唯一的,后3个字节确保相同进程同一秒产生的ObjectId是不一样的。
MongoDB Shell
MongoDB自带一个JavaScript shell,可以通过命令行与MongoDB实例交互。
- 运行shell
windows平台下,通过在命令行运行bin目录下的mongo.exe文件,即可启动shell;Linux下通过运行mongo文件启动shell。shell会在启动时自动连接MongoDB服务器,所以要确保在使用shell之前启动mongod。
- MongoDB客户端
shell是一个独立的 MongoDB客户端,开启时,shell会连到MongoDB服务器的test数据库,并把这个数据库连接赋值给全局变量db。可以通过use命令来转换数据库:use wangdh(如果该数据库不存在则会创建)。
- shell中的基本操作
一般数据库的基本操作都是:创建、读取、更新、删除(CRUD).
1)创建 insert
insert函数添加一个文档到集合中。例如:先通过局部变量t1存储要插入的文档,然后通过全局变量db.集合名.insert(t1)将文档t1插入到指定集合中(集合不存在时会自动创建)。
>t1={"name":"wangdh","age":22}
>db.user.insert(t1)
2)读取 find
find函数返回集合中的所有文档,findOne函数返回一个文档。
例如:db.user.find()会将刚才插入的文档读取出来。
两个函数都可以接受查询文档形式的行动条件,使用find时,shell自动显示最大20个匹配的文档
3)更新 update
update函数接受至少两个参数:第一个是要更新的限定条件,第二个是新的文档。如:
>newName={"name":"newName"}
>db.user.update({"name":"wangdh"}, newName)
4)删除 remove
remove函数从数据库中永久性的删除文档,在不适用参数指定限定的情况下,会删除一个集合内的所有文档,例如:db.user.remove()
MongoDB学习笔记—02 MongoDB入门的更多相关文章
- Mongodb学习笔记一(Mongodb环境配置)
Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...
- MongoDB学习笔记(一) MongoDB介绍及安装(摘)
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++开发.Mongo的官方网 ...
- Mongodb学习笔记二(Mongodb基本命令)
第二章 基本命令 一.Mongodb命令 说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法. 对于database和collection无需主动创建,在插入数据时,如果databas ...
- MongoDb 学习笔记(一) --- MongoDb 数据库介绍、安装、使用
1.数据库和文件的主要区别 . 数据库有数据库表.行和列的概念,让我们存储操作数据更方便 . 数据库提供了非常方便的接口,可以让 nodejs.php java .net 很方便的实现增加修改删除功能 ...
- MongoDB学习笔记一(MongoDB介绍 + 基本指令 + 查询语句)
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可扩 ...
- MongoDB学习笔记一:入门
文档:多个键及其关联的值『有序』地放置在一起. {"greeting" : "Hello, world!", "foo" : 3}集合:一组 ...
- MongoDB学习笔记02
MongoDB中使用find来进行查询,查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合.find的第一个参数决定了要返回哪些文档.空的查询文档{}会匹配集合的全部内容,要是不指定查 ...
- MongoDB学习笔记01:入门
MongoDB简介 MongoDB是一个开源.高性能.无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种.是最 像关系型数据库(MySQL)的非关系型数据库. ...
- MongoDB学习笔记(一) MongoDB介绍及安装
转自:http://database.51cto.com/art/201103/247882.htm http://baike.baidu.com/link?url=b6B3dVSCnQauCX-Ep ...
随机推荐
- LDAP与禅道
一:搭建禅道做测试 搭建过程参考http://www.cnblogs.com/hiyu/p/5841650.html 1):下载 ZenTaoPMS.Pro5.5.1.zbox_64.tar.gz ...
- LDAP与Samba
默认的Samba服务器支持本地系统用户(smbpasswd添加后)访问Samba资源,不支持OpenLDAP服务器账号访问Samba共享资源 目的:配置完后,OpenLDAP每新增一个用户,就自动支持 ...
- hdu 1849(Rabbit and Grass) 尼姆博弈
Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- css:去掉手机浏览器上点击时的边框和阴影
outline:none;(去掉蓝框) -webkit-tap-highlight-color:rgba(0,0,0,0) ;(去掉阴影)适用于ios,Android
- start
------siwuxie095 start 启动另一个窗口运行指定的程序或命令 语法: START ["title"] [/D path] [/I] [/MIN] [/MAX] ...
- Codeforce 370J Bottles(动态规划-01背包)
题目链接:http://codeforces.com/problemset/problem/730/J 题目大意:有n个杯子, 每个杯子有两个值一个是已装水量,一个是可装水量.从一个杯子向另一个杯子倒 ...
- django单元测试
django 单元测试小结 django 测试 从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合 ...
- 控制input标签中只能输入数字以及小数点后两位
js 代码如下: /* 控制input标签中只能输入数字 和小数点后两位 */ function checkNum(obj) { //检查是否是非数字值 if (isNaN(obj.value)) { ...
- L440 无线网卡:由于该设备有问题,Windows 已将其停止(代码 43)
最近重装了系统,本来用的好好的,结果重启之后突然无线网卡不能用了,设备管理器老是黄色叹号!无线网卡设备状态:由于该设备有问题,Windows 已将其停止. (代码 43). 无线网卡型号:2 ...
- android BluetoothLE 多个 setCharacteristicNotification writeCharacteristic 失效
如果在搜索完服务后,执行多个 setCharacteristicNotification 或 writeCharacteristic 操作,某些操作可能会无效.需要在中间等待一些时间,真是一个大坑! ...