MongoDB是以文档为单位进行存储的,所以对数据的操作也是针对文档进行的,和关系型数据库一样,包括创建数据库,创建文档,对文档进行删除、修改、查询等。MongoDB的增删改,是以bson格式数据进行的,BSON是一种类似于JSON的二进制形式存储形式。
名词对比
database:database:在关系型数据库和MongoDB数据库中,database都代表数据库
table:collection:关系型数据库的表,在MongoDB中称为集合
row:document:关系型数据库表中的行,是MongoDB中的文档
column:field:在关系型数据库中,有每一列之称,但在MongoDB中则是域的概念
index:index:两者都称为索引
primary key:primary key:关系型数据库中的主键需要创建,在MongoDB中自动将_id字段设置为主键
关系型数据库中的表与表之间有各种表关系,但是在MongoDB中是没有的,各个collection相互独立,是无法联合做数据操作的。
数据操作
启动MongoDB
在操作数据前,应该先启动MongoDB。首先使用命令启动MongoDB服务端,mongod --dbpath E:\MongoDB\db-data,启动并制定数据库的位置,当显示等待连接到27017端口即为启动成功,默认是27017端口;再启动MongoDB的客户端,mongo 127.0.0.1:27017/admin,采用的是admin登录,登录成功后即可进行下面数据操作的命令。
创建数据库
首先是执行show dbs命令查看当前有哪些数据库,我这里只有local一个,是MongoDB自带的;然后执行use dbTest命令切换到数据库dbTest,但是此时数据库还没有创建,所以再次执行show dbs的时候还是只有local库;切换数据库后需要对数据进行操作才会保存,否则MongoDB默认不保存,接下来执行一个插入命令,db.collectionTest.insert({name:"fiala"}),意思是创建一个名字为collectionTest的collection,插入的数据是name为fiala,一定要注意括号和花括号,因为在执行命令时两个括号并不明显;接下来再次执行show dbs就可以看到刚才新创建的数据库了。
查询数据库
db:该命令是查询当前所使用的数据库
show dbs:该命令是查询所有的数据库
删除数据库
如果要删除数据库dbTest,应该先use dbTest设置为当前数据库,然后执行db.dropDatabase()命令来删除数据库。
添加文档
如果要简单的添加一个field,可以利用创建数据库时添加命令:db.collectionTest.insert({name:"fiala"})。如果要添加整个文档,可以像上图所示,先将文档写好,然后执行db.collectionTest.insert(document)命令,collectionTest是要添加到collection的名字。要注意,写document时外层是(),内层是{},在图片上不明显。除了insert方法,还可以使用save方法,执行db.collectionTest.save(document)命令,使用save方法时,如果有_id就更新_id所标识的数据,如果没有则会生成_id。
查询文档
查询文档的命令就是db.collectionTest.find()/db.collectionTest.find().pretty(),前一个只是查询出collection中的文档,加pretty()方法可以美化查出的文档显示。当然查询也可以写条件,例如上图的第三条命令,查询的就是name=fiala的文档,条件的查询格式:db.collection.find({"key":"value","key":"value"}),这样查询可以使用and的方式查询出两个key对应value的文档。如果要使用or条件,使用该命令:db.collection.find({$or:[{"key":"value"},{"key":"value"}]})。
在查询命令中,不等于号是不能直接使用的,需要用置换符进行替换,如下:
$gt:大于,>
$lt:小于,<
$gte:大于等于,>=
$lte:小于等于,<=
命令为:db.collectionTest.find({"age":{$gt:20}}).pretty()。
另外还可以限制查询条数,如下所示:
db.COLLECTION_NAME.find().limit(NUMBER):查询NUMBER条数据
db.COLLECTION_NAME.find().limit(NUMBER1).skip(NUMBER2):跳过NUMBER2条数据来查询NUMBER1条数据
更新文档
db.collection.update(
<query>, //update的查询条件,根据该条件查询出要更新的文档
<update>, //需要update的域,以及一些更新的操作符
{
upsert: <boolean>,//可选,如果不存在update的记录,是否插入要插入的数据,true为插入,默认是false不插入
multi: <boolean>, //可选,默认为false,只更新查出来的第一个文档,如果为false,则更新查询出来的所有数据
writeConcern: <document>//可选,抛出异常的级别
}
)
update方法的使用格式如上面代码所示,每个参数的含义如后面标识所示。如上面图片,根据name=Yasmine查出文档,并使用$set命令将age更新为21,再次查询则会显示最新的数据。
删除文档
db.collection.remove(
<query>, //可选,删除的文档的条件,根据query的条件查出要删除的文档
{
justOne: <boolean>,//可选,如果设置为true或1,则只删除一个文档
writeConcern: <document> //可选,抛出的异常级别
}
)
总结
参考MongoDB的官网做的实验,如果有什么差错,还望过路的大神指点,谢谢!