Mongodb学习笔记Word格式.docx
- 文档编号:21771865
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:53
- 大小:575.28KB
Mongodb学习笔记Word格式.docx
《Mongodb学习笔记Word格式.docx》由会员分享,可在线阅读,更多相关《Mongodb学习笔记Word格式.docx(53页珍藏版)》请在冰豆网上搜索。
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"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mongodb 学习 笔记