什么是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})