MongoDB的增删改查
创建数据库
语法
MongoDB创建数据库的语法格式如下:
use DATABASE_NAME
如果数据库不存在,则创建数据库,负责切换到指定数据库
例子:
这里要说明下,MongoDB中默认数据库为test,如果没有创建数据库,直接将数据(集合)放入未创建的数据库中,这时,MongoDB是将该集合存放在了test数据库中,而并没有创建该数据库,再把集合放进去(这么复杂,它好像还做不来_)
上例,我想往数据库中存入集合,但我忘记创建该数据库,这条语句将会将集合a存入到test数据库
删除数据库
语法
MongoDB删除数据库的语法格式为:
db.dropDatabase()
删除当前数据库,默认为test,可使用db命令查看当前数据库名。
例子:
以删除刚才我们创建的data数据库为例
可通过show dbs命令查看数据库是否删除成功
删除集合
语法格式:
db.collection.drop()
例子中插入两个集合a,b,使用该命令将集合a删除
在删除数据库与集合操作中,当将集合删除完之后,使用show dbs查看数据库时,发现当前数据库已经没有了,给我种感觉,数据库因集合存在而存在,也因集合消失而消失,但集合却未因数据库存在而存在,即使没有数据库,它还可以栖息于test数据库中。
插入文档
文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON
MongoDB使用insert()或save()方法向集合中插入文档,语法如下:
db.COLLECTION_NAME.insert(document)
例子:
以下文档可以存储在data数据库的data1集合中
data1集合,如果不在该数据库中,MongoDB会自动创建该集合并插入文档
db.data1.find()查看data1集合中数据(文档)
也可以将数据定义为一个变量,然后插入集合
执行插入操作并查看
db.collection.update(criteria,objNew,upsert,multi)
update()函数接受一下四个参数:
- criteria:update的查询条件,类似SQL update查询内where后面的
- objNew:update的对象和一些更新的操作符(如\(,\)inc...)等,也可以理解为sql update查询内set后面的
- upsert:如果不存在update的记录,是否插入objNew,true为插入,默认为false,不插入
- multi:MongoDB默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来的多条记录全部更新
向data数据库中插入名为“userDetails”的集合,以下是要插入的数据:
document=({"user_id" : "MNOPBWN","password" :"MNOPBWN" ,"date_of_join" : "16/10/2010"
,"education" :"M.C.A." , "profession" : "CONSULTANT","interest" : "MUSIC","community_name" :["MODERN MUSIC",
"CLASSICAL MUSIC","WESTERN MUSIC"],"community_moder_id" : ["MR. BBB","MR. JJJ","MR MMM"],"community_members" :
[500,200,1500],"friends_id" : ["MMM123","NNN123","OOO123"],"ban_friends_id" :["BAN123","BAN456","BAN789"]});
document=({"user_id" : "QRSTBWN","password" :"QRSTBWN" ,"date_of_join" : "17/10/2010" ,"education" :"M.B.A."
, "profession" : "MARKETING","interest" : "MUSIC","community_name" :["MODERN MUSIC", "CLASSICAL MUSIC","WESTERN
MUSIC"],"community_moder_id" : ["MR. BBB","MR. JJJ","MR MMM"],"community_members" : [500,200,1500],"friends_id" :
["MMM123","NNN123","OOO123"],"ban_friends_id" :["BAN123","BAN456","BAN789"]});
使用update()命令更新数据
目标:将"userdetails"集合中"user_id"为"QRSTBWN"的"password"字段修改为"NEWPASSWORD"。(如果criteria参数匹配集合中的任何一条数据,它将会执行替换命令,否则会插入一条新的数据。)
查看更新后的数据:
若想值修改某个字段,而不希望将整个文档中的数据重写一遍,可采用下面的方法:
只更新一条记录:
全部更新:
只添加一条:
全部添加进去:
$inc 字段值加1
删除文档
MongoDB remove()函数用来移除集合中的数据
MongoDB数据更新可以使用update()函数。在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
remove()方法的基本语法格式如下:
db.collection.remove(
<query>,
<justOne>
)
参数说明:
- query:(可选)删除的文档的条件
- justOne:(可选)为true或1,则只删除一个文档
- writeConcern:(可选)抛出异常的级别
可看到删除了三条数据
如果想只删除一条找到的记录,可将justOne设置为1,如下:
db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
若想删除所有数据,可采用以下方式:
查询文档
语法
MongoDB查询数据的语法格式如下:
db.COLLECTION_NAME.find()
find() 方法以非结构化的方式来显示所有文档。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.col.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。
例子:
以上面用到的userdetail集合为例:
除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。
MongoDB 与 RDBMS Where 语句比较
MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。
语法格式如下:
db.col.find({key1:value1, key2:value2}).pretty()
例子:
相当于where语句: where name = "" AND education=""
MongoDB OR条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
AND 和 OR 联合使用