Mongodb学习笔记Word格式.docx

上传人:b****5 文档编号:21771865 上传时间:2023-02-01 格式:DOCX 页数:53 大小:575.28KB
下载 相关 举报
Mongodb学习笔记Word格式.docx_第1页
第1页 / 共53页
Mongodb学习笔记Word格式.docx_第2页
第2页 / 共53页
Mongodb学习笔记Word格式.docx_第3页
第3页 / 共53页
Mongodb学习笔记Word格式.docx_第4页
第4页 / 共53页
Mongodb学习笔记Word格式.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

Mongodb学习笔记Word格式.docx

《Mongodb学习笔记Word格式.docx》由会员分享,可在线阅读,更多相关《Mongodb学习笔记Word格式.docx(53页珍藏版)》请在冰豆网上搜索。

Mongodb学习笔记Word格式.docx

Document-Oriented面向文档数据库

用“Document”替代关系数据库的“Row”的概念

Schema-free模式自由

EasyScaling易扩展

Features特性:

●Indexing索引

●StoredJavaScript开发者能在服务器端使用和存储javascript方法、变量

●Aggregation聚合器,MangoDB支持MapReduce和其它聚合器工具

●Fixed-SizeCollections

●FileStorage文件存储,支持大文件存储及文件的元数据

…WithoutSacrificingSpeed不牺牲速度

SimpleAdministration管理简单

Masterdown机时MangoDB可以自动将Slave切换为Master

第二章开始

基本概念

●Document一个document相当于RMDBMS中Row

●Collection相当于一个没有模式限制的Table

●一个MongoDB实例可以有多个无关的数据库,里面保存我们的Collection和许可

●MongoDB有一个简单而又强大的JavaScriptShell,我们常用来管理MongoDB,类似于MySql总的Sql语句的作用

●每一个Document都有一个特殊的key:

“_id”,用它来作为Document的Collection的唯一标识

Document

Document是MongoDB的一个核心概念,用key关联着value

Collections

一个Collections就是多个Document的组合。

假如说mongoDB的Document是关系数据库的一个行(row)的话,那Collection就是关系数据库的一个表(table)

Schema-Free模式自由

mongoDB的Collection不受类似关系数据库中的一、二、三范式思想的束缚,没有可以没有固定的类似数据字段式的结构,也就是在同一个Collection中可以有多种结构的Document

Naming命名

每个Collection是用名字来做唯一标识,它的名字可以是任何utf8字符,同时也有点限制:

不能使用空字符串(“”)

Collection不能用字符\0(空字符)

不能以system.做Collection名称前缀,因为system.是作为系统预留的,比如system.users保存数据库的用户信息

用户创建collection是不能用“$”这个保留字

Subcollections子集

如果已经有个blogcollection,这时有个叫blog.posts的collection,那么这个就是blog的subcollection

Subcollection虽然在mongoDB中没有特殊的功能,但是在mongoDB的一些工具中特别有用:

●GridFS

●Webconsole

●某些驱动

在mongoDB中subcollection可以非常好的组织数据,所以这种用法非常推荐

Databases数据库

在将document加入collection之前,mongoDB需要将collection加到数据库中,一个MongoDB主机上通常会有多个数据库,它们之间也可能互不相关。

一个数据库拥有一个许可,并且在硬盘上用特定的文件存储。

●与Collection类似,Database也是用name作为唯一标识,可以用几乎任何UTF8字符来命名,

●不能用空字符串命名(””)

●名称中不能使用这些字符:

空格(’‘),点(.),美元符号($),斜杠(/),反斜杠(\),null(\0)

●数据库名称必须是小写字母

●数据库名称字符长度不能多于64位(bytes)

也是由于数据库将以其名称为文件名存储在系统中,所以才有了以上的命名限制

同时还有几个保留的数据库名称:

●admin这个是根级数据库,假如有个用户加到admin数据中的话那么这个用户将自动集成所有数据库的许可,它就可以在服务器端运行命令,比如列出所有的数据库或者关闭服务等命令

●local这个数据库不会被复制它所存储的任何collections,它只能在各自的服务器实例本身上

●config在分布式sharding设置时将用于相关的信息存储

GettingandStartingMongoDB

MongoDBShell

它是完全支持JavaScript解析能够运行所有的javaScript程序,

MongoDB客户端

客户端初始连接数据库服务器时后默认连接到的当前数据库是test数据库

use<

dbname>

切换数据库

BasicOperationswiththeShell基本的shell操作(CRUD)

Creat:

insert方法用了将document插入到collection中

>

post={"

title"

:

"

MyBlogPost"

..."

content"

Here'

smyblogpost."

date"

newDate()}

{

SatDec12200911:

23:

21GMT-0500(EST)"

}

db.blog.insert(post)执行插入

db.blog.find()查看结果

Read

find方法可以返回一个collection中的所有document,findOne方法用来返回一个document,这两个方法是用了查询数据的

db.blog.find()

db.blog.findOne()

Updade

ments=[]

[]

db.blog.update({title:

},post)//更新title=”MyBlogPost”的document的属性comments

_id"

ObjectId("

4b23c3ca7525f35f94b60a2d"

),

comments"

[]

Delete

删除一个document用remove方法

db.blog.remove({title:

})//删除title为"

的所有document

TipsforUsingtheShell

help

HELP

showdbsshowdatabasenames

showcollectionsshowcollectionsincurrentdatabase

showusersshowusersincurrentdatabase

showprofileshowrecentsystem.profileentriesw.time>

=1ms

dbname>

setcurrentdatabaseto<

db.help()helponDBmethods

db.foo.help()helponcollectionmethods

db.foo.find()listobjectsincollectionfoo

db.foo.find({a:

1})listobjectsinfoowherea==1

itresultofthelastlineevaluated

db.help()

db.foo.help()

db.foo.update//显示update方法的定义过程

function(query,obj,upsert,multi){

assert(query,"

needaquery"

);

assert(obj,"

needanobject"

this._validateObject(obj);

this._mongo.update(this._fullName,query,obj,upsert?

true:

false,multi?

false);

让人看起来不舒服的collection名称

db.version//version内建方法

function(){

returnthis.serverBuildInfo().version;

db.getCollection("

version"

//version是个collection

test.version

DataTypes数据类型

BasicDataTypes

Document使用的是Json风格的数据,但是json数据支持的类型有限,仅仅支持null,boolean,numeric,string,array,和object

MongoDB支持的数据类型:

Null{"

x"

null}

Boolean{"

true}

32-bitinteger32位整型

64-bitinteger64位整型

64-bitfloatingpointnumber64位浮点数,所有数字在shell都是这个类型{"

3.14}{"

3}

String所有字符都是使用utf8类型{"

foobar"

Symbol该类型在shell中是不支持的,假如在shell中获取一个symbol类型的数据将会转换成字符串

objectiddocument的objectid是一个12位的唯一id{"

ObjectId()}

date{"

regularexpression正则表达式,支持javaScript的正则表达式{"

/foobar/i}

codedocument可以包含JavaScript代码{"

function(){/*...*/}}

binarydata二进制数据,是字节专用的字符串,它不能在shell中操控

maximumvalue

minimumvalue

undefined这与JavaScript中的null和undefined不同{"

undefined}

array{"

["

a"

"

b"

c"

]}

embeddeddocument{"

{"

foo"

bar"

}}

Numbers

Dates

JavaScript的date类型

Arrays

{"

things"

pie"

3.14]}

EmbeddedDocuments

name"

JohnDoe"

address"

{

street"

123ParkStreet"

city"

Anytown"

state"

NY"

}

_idandObjectIds

ObjectIds

Objected使用的是12位存储,用24个16进制数字表示(两个数字占1位)。

12位ObjectId的产生规则:

Autogenerationof_id

第三章:

创建、更新和删除Document

插入和保存Documents

db.foo.insert({"

baz"

})

批量插入

在插入多个document的情况下批量插入更加快速高效

},{"

baz1"

baz2"

RemovingDocuments

db.users.remove()

db.mailing.list.remove({"

opt-out"

true})

RemoveSpeed

如果是只删除一条符合条件的document的话remove方法比drop更高效(删除后会重新索引)

但是要删除大量数据的时候drop就更比remove高效多,下面是一个实例代码(Python):

插入100万个document

foriinrange(1000000):

collection.insert({"

:

i,"

z"

10-i})

做删除操作

importtime

frompymongoimportConnection

db=Connection().foo

collection=db.bar

start=time.time()

collection.remove()

collection.find_one()

total=time.time()-start

print"

%dseconds"

%total

这段删除操作代码在一个MacBookAir本本上显示的执行时间为46.08seconds

将上面代码中的remove和find_one替换为db.drop_collection("

),删除只需要.01秒,这是一个重大的改进。

在这个过程中barcollection被删除了,索引也会被删除

UpdatingDocuments

修饰符:

$inc:

4b253b067525f35f94b60a31"

url"

"

pageviews"

52

db.analytics.update({"

},

...{"

$inc"

1}})

db.analytics.find()

53

$set:

db.users.findOne()

joe"

age"

30,

sex"

male"

location"

Wisconsin"

db.users.update({"

)},

$set"

favoritebook"

warandpeace"

}})

greeneggsandham"

...["

cat'

scradle"

foundationtrilogy"

ender'

sgame"

]}})

$unset"

db.blog.posts.findOne()

ABlogPost"

..."

author"

email"

joe@"

db.blog.posts.update({"

author.name"

},{"

joeschmoe"

自增和消耗

db.games.insert({"

game"

pinball"

user"

db.games.update({"

score"

50}})

db.games.findOne()

4b2d75476cc613d5ee930164"

50

10000}})

db.games.find()

10050

$inc表示自增长

数组修饰符

$push:

Ablogpost"

},{$push:

nicepost."

}}})

[

]

再来一次

bob"

bob@"

goodpost."

},

$ne

db.papers.update({"

authorscited"

$ne"

Richie"

}},

...{$push:

$addToSet:

db.users.findOne({"

)})

username"

emails"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1