MongoDB的简便入门

MongoDB的基本概念

  • MongoDB的数额单元是文档,可以看作JavaScript中的对象,类似于关周详据库中的行。
  • 集合(Collection)类似于关系数据库中的表,区别在于没有形式。
  • 每个MongoDB数据库都自身的汇集和权限。
  • MongoDB的操作紧要靠终端的JavaScript Shell完成。

文档

在JavaScript中,文档表示为对象:

{"name": "XueSeason", "age": 22}

以上文档有一个name键,其值为XueSeason,age键值为22
从那个文档,解释了多少个概念:

  • 文档中的键值对是平稳的,上边例子中假使互换name和age的键值对,将会被视为一个新的文档。
  • 文档中的值不仅仅只限于字符串模式,还有其他更高级的项目。
  • 文档的键使用UTF-8字符。其中.$不乏先例被保留,唯有在一定条件下使用,_也是保留的。

集合

汇集就是文档集,作为NoSQL是分别于关周详据库的表。

无模式

集结是无情势的。即不同门类的文档可以存活于同一个凑合中:

{"name": "XueSeason", "age": 22}
{"book": "The old man and the Sea"}

留意下边的文档是一点一滴两样的两个文档。既然一个汇集可以容纳各个类型,为啥需要多聚集?
运用多聚集的意思在于:

  • 降低熵值。即减弱混乱程度。
  • 进度上的优越性。把一个特定类型的文档分成四个子集合提升查询成效。
  • 把同序列型的文档存在一个汇集汇总,使数据更集中。

推介尽量使用子集合来公司数据。

命名

  • 集合名不可能为空字符串。
  • 不可以含有\0字符。
  • 不能以system.发端,系统集结的保留前缀。
  • 不可以含有保留字符$

启动MongoDB

担保您成功安装MongoDB并且正确配置。
极限输入mongod命令。

若果出现类似以下音讯:

2015-03-28T13:35:04.067+0800 W -        [initandlisten] Detected unclean shutdown - /data/db/mongod.lock is not empty.
2015-03-28T13:35:04.067+0800 I STORAGE  [initandlisten] exception in initAndListen: 98 Unable to lock file: /data/db/mongod.lock errno:35 Resource temporarily unavailable. Is a mongod instance already running?, terminating
2015-03-28T13:35:04.067+0800 I CONTROL  [initandlisten] dbexit:  rc: 100

讲明已经有一个MongoDB程序在后台运行。
可以透过ps -ef搜索到有关的pid,执行kill [pid]强制关闭。

MongoDB在未曾参数的景象下默认会利用/data/db目录,并监听27017端口。
如若该目录不设有或者不可写,服务器也会启动失利。

MongoDB Shell

运行mongo启动shell:

xuejijiedeMacBook-Pro:~ xuejijie$ mongo
MongoDB shell version: 3.0.1
connecting to: test
> 

这会儿,你可以用REPL情势举办JavaScript代码。

MongoDB客户端

MongoDB
Shell的确实有力不仅在于是一个JavaScript的解释器,而且仍旧一个MongoDB客户端。
拉开的时候,shell会连到MongoDB服务器的test数据库,并将这些数据库连接赋值给全局变量db

采取数据库:

> use mydatabase
switched to db mydatabase
> db
mydatabase

CRUD

接下去学习下操作数据的4个基本操作。

NoSQL,创建

使用insert函数,可以添加文档到相应的联谊中。

> post = { "title": "The first day", "content": "It is awesome time", "date": new Date()}
{
    "title" : "The first day",
    "content" : "It is awesome time",
    "date" : ISODate("2015-03-28T05:53:16.355Z")
}
> db.blog.insert(post)
WriteResult({ "nInserted" : 1 })
> db.blog.find()
{ "_id" : ObjectId("551641e5b1f58081c3b9d7ea"), "title" : "The first day", "content" : "It is awesome time", "date" : ISODate("2015-03-28T05:53:16.355Z") }

上述操作首先创制一个post对象,然后经过insert方法将数据存放到blog集合中,最终通过find函数,体现blog集合中的所有文档。

这时文档多了附加的键_id,是系统自动抬高的主键。

读取

find会重回集合的装有文档。若只想查看一个文档,可以用findOne
有关更多询问内容,将作为新的稿子讲解。

更新

update函数接受五个参数:所更新文档的限制条件,新的文档。

> post.comment = []
[ ]
> db.blog.update({title: "The first day"}, post)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blog.find()
{ "_id" : ObjectId("551641e5b1f58081c3b9d7ea"), "title" : "The first day", "content" : "It is awesome time", "date" : ISODate("2015-03-28T05:53:16.355Z"), "comment" : [ ] }

删除

remove函数永久删除文档,即便无参,就会删除集合内的有所文档。也足以承受范围条件删除指定内容。

更多shell指令可以因而help查看,或者参考官方doc。

原稿博客

网站地图xml地图