MongoDB基础与使用概述
下载安装MongoDB,bin目录下mongod.exe负责启动服务,mongo.exe用于连接数据库。
MongoDB中数据库的概念与MySQL相对应,另两个概念是集合和文档。集合如同数据表,由多个文档组成。文档即记录,相当于数据表中的一行。
由mongo启动的shell是一个功能完备的JavaScript解释器,可运行JavaScript程序。
增加
MongoDB不需要新建数据库的操作,可在命令行执行如下命令,查看当前使用的数据库名:
默认为test。切换数据库可以使用命令:
MongoDB同样不需要新建集合,直接插入文档即可:
该命令向foo集合插入了一个文档。文档格式类似JSON,与JavaScript的对象相似,但不只是JSON,因为MongoDB要求并拥有比JSON更多的数据类型,比如日期类型。
集合是无模式的,因为可以向同一集合中插入这两个文档:
该文档的值类型不同,键名称也完全不同,这是NoSQL与SQL的一大不同。
查询
MongoDB中使用find()和findOne()查询数据,方法可接收多个参数,第一个参数为查询文档的条件,第二个参数为要查询的字段,不传参则为空。该下面的命令查询出foo集合中所有的文档:
可以向查询文档加入多个查询条件,比如查询出username为joe,age值为27的文档:
也可以指定返回的键,比如只查询username和email键:
可以看到结果集中包含三个键,_id总是被返回。这个键是数据库内部标识文档的唯一id,如果要避免返回它,可使用命令:
模糊匹配
查询条件除第一个参数精确匹配外,也可传入比较运算符,实现模糊匹配。比较关键字与比较运算符的对应关系为:
关键字
运算符
$lt
<
$lte
<=
$gt
>
$gte
>=
比如查询条件为18 <= age <= 30,可写为:
or
查询条件实现or关系,可使用$in或$or关键字。
单一键有多个值匹配,使用$in,如中奖号码为725、542、390:
与"$in"相对的是"$nin",将返回与数组中与所有条件都不匹配的文档:
希望根据多个键为条件进行查询,使用$or,如中奖号码之外,还要winner键值为true:
not
$not是元条件句,可以使用在任何其他条件之上。
null
null关键字一向比较奇怪,MongoDB中,null作为查询条件不仅可以匹配值为null的文档,还能匹配键不存在的文档。
如果仅仅想要匹配键值为null的文档,则需要同时检查键是存在的:
使用$in操作符的原因是,MongoDB中没有$eq操作符。
MongoDB还拥有大量其它运算符、关键字帮助文档的查询,包括但不限于$all、$size、$slice、$elemMatch、$where、游标等。find()方法后也可接limit()、skip()、sort()等方法,对查询结果进行限制。
更新
更新文档最直接的方法是使用update()方法,第一个参数指定条件,第二个参数为修改后的文档:
如果需要应对一些复杂的数据更新的场景,就需要用到修改器。如:
$set修改器用于指定一个键的值,如果键不存则创建。$inc修改器用来增加已有键的值,如果键不存在则创建。$push修改器向已有的数组末尾加入一个元素,不存在则创建。
此外还有丰富的修改器以及组合。
数组操作中一个比较常用的是定位修改器,在不知道数组下标的情况下,可以这样使用:
即把评论中用户名为"John"更改为"Jim"。注意定位符只更新第一个匹配到的元素。
MongoDB默认只更新匹配到的第一个文档。如果需要更改匹配到的所有文档,则指定update()方法的第四个参数为true。update()方法的第三个参数指如果文档不存在,是否插入文档,默认为false。
删除
使用remove()方法删除文档,第一个参数指定删除条件:
数据删除是永久的,不能闪回。
在Node.js中使用
执行以下命令安装MongoDB驱动:
Node.js对MongoDB的操作通常是回调的写法,下面是一个简单的插入文档的示例,包含连接数据库并对数据库进行数据插入的操作:
MongoDB非常适用于JavaScript环境。
在Java中使用
在Java中使用MongoDB,需要mongodb-java-driver。
获取数据库连接对象:
对数据库的操作均使用collection对象。
如果要创建一个这样的JSON文档:
使用Java要这么写:
一个Document对象相当于一个JavaScript对象。
向数据库中插入文档使用insert方法:
在MongoDB的shell中,使用命令查看文档是否成功插入:
Java中查询数据同样使用find方法,比如查询集合中第一个文档,并打印到控制台:
查询所有文档则需要使用游标:
更多详细用法可查阅官网。
在PHP中使用
PHP中MongoDB作为扩展被加载。
获取连接对象:
获取批量写入对象,并插入三个文档:
查询数据:
更多操作对象可参阅扩展官网。
在Python中使用
使用pip安装pymongo。
测试模块是否成功安装:
获取数据库和集合的操作对象:
从连接对象获取并打印所有存在的数据库和集合名称:
Python拥有字典这样的数据类型,在对MongoDB的操作上会比Java轻松一点。