什么是mongodb?
MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个高性能,开源,无模式的文档型数据库,官方给自己的定义是Key-value存储(高性能和高扩展)和传统RDBMS(丰富的查询和功能)之间的一座桥梁。
MongoDB中保存的数据格式为BSON,如:
{
name:"xiaowang",
age:"18",
hobby:["eat","sleep"]
}
MongoDB中数据的基本单元称为文档(Document),它是MongoDB的核心概念.
数据在MongoDB中以BSON(Binary-JSON)文档的格式存储在磁盘上。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。
BSON有三个特点:轻量性、可遍历性、高效性。它的缺点是空间利用率不是很理想。
mongodb插入文档:
在MongoDB使用db.collection.insert(document)语句来插入文档[document是文档数据,collection是存放文档数据的集合。]
eg:db.users(表).insert({
name:"xiaowang",
age:18,(数字不是对象不用引号)
hobby:["eat","sleep"]
})
***注意: 如果collection存在,document会添加到collection目录下, 如果collection不存在,数据库会先创建collection,然后再保存document。
想要查看已插入的xx文档,可以使用:db.xx.find()查看当前库中xx集合里的数据。
如果想要查看当前数据库中的集合列表,可以使用:show collections
那如何批量插入数据呢?
insert语句不但可以插入单个文档,还可以一次性插入多个文档。
插入多个文档时,insert命令的参数为一个数组,数组元素为BSON格式的文档。
多个文档可以放在一个数组内,一次插入多条数据,例如:
db.user.insert([{name:'a'},{name:'b'}])
db.users.insert([{name:"tommy"},{name:"xiaoming"}])
文档批量插入非常方便,但是使用批量插入时也有一些问题需要注意,因为BSON格式的限制,一次插入的数据量不能超过16M,在一个insert命令中插入多条数据时,MongoDB不保证完全成功或完全失败。
find查询
MongoDB中查询检索数据时使用find命令,使用方法如下:
语法:
db.collection.find(criteria,projection);
参数:
criteria – 查询条件,文档类型,可选。
db.user.find(
{age:18}, criteria查询条件
{name:1} projection返回字段
)
projection– 返回的字段,文档类型,可选,若需返回所有字段,则忽略此参数。
find命令两个可选参数,criteria为查询条件,projection为返回的字段,如果不传入条件数据库会返回该集合的所有文档。
即db.user.find() 查询user内的所有集合文档
update 更新
update命令可以更新指定文档的特定字段值,也可以替换整个文档(注意:如果更新操作会增加文档大小,MongoDB将重新分配空间并重新定位)
语法:
db.collection.update(query,update,{upsert:boolean,multi:boolean});
参数:
query:查询条件,文档,和find里的查询条件写法一致。
update:修改内容,文档。
upsert(可选):如果值为true,那么当集合中没有匹配文档时,创建文档。默认false。
multi(可选):如果值为true,那么将更新全部符合条件的文档,否则仅更新一个文档,默认false。
将user集合中所有符合条件"age=18"文档的hobby:更新为sleep"。
eg: db.user.updata(
{age:18}, //query查询条件 【大于$gt 小于$lt eg: {age:{$gt:20}} age大于20】
{$set{"hobby":"sleep"}}, //修改内容
{multi:true}
)
save修改
save命令可以更新或插入一个新文档,与update命令不同的是,save只能对一个文档进行操作。
语法:
db.collection.save();
参数:
document:新的文档;
eg:db.user.save({name:"xiaoli"})
remove删除
需要删除文档时使用remove命令,删除文档可以清理掉不需要的数据,释放存储空间,提升检索效率
语法:
db.collection.remove(
query,
justOne
)
参数:
query:BSON类型,删除文档的条件。
justOne:布尔类型,true:只删除一个文档,false:默认值,删除所有符合条件的文档。
eg db.user.remove({name:"xiaoli"},{justOne:true})