MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有:
文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多) 集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表 MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限 MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大 每一个文档都有一个特殊的键”_id”,它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键
在命令行中可以使用mongo命令连接到MongoDB服务器,如下,输入mongo命令默认连接到本地的名称为test的数据库,如果希望连接到远程数据库,可以使用mongo ip:port
创建数据库,使用命令 use 数据库名称
删除当前数据库,使用命令 db.dropDatabase()
查看所有数据库,使用命令 show dbs
查看当前所在数据库,使用命令 db
查看当前数据库中所有的集合,使用命令 show collections 或使用show tables
创建集合有两种方式:
显示创建和隐式创建
显示创建可以使用命令 db.createCollection(“集合名称”)
隐式创建可以使用命令 db.集合名称.insert({}),指创建集合并同时向集合中插入数据,例如:db.customer.insert({name:”jack”})
向集合添加文档,使用命令 db.集合名称.insert({})
删除集合中的文档,使用命令 db.集合名称.remove({删除条件}),不加删除条件为删除集合中的所有文档
查询集合中的文档,可以使用命令 db.集合名称.find({条件}),或者使用 db.集合名称.findOne() 查询第一个文档
查询集合中的文档 ,使用条件表达式(<, <=, >, >=,!=)
//大于: field > value
db.collection.find({field:{$gt:value}});
//小于: field < value
db.collection.find({field:{$lt:value}});
//大于等于: field >= value
db.collection.find({field:{$gte:value}});
//小于等于: field <= value
db.collection.find({field:{$lte:value}});
//不等于: field != value
db.collection.find({field:{$ne:value}});
查询集合中的文档 ,统计(count)、排序(sort)、分页(skip、limit)
db.customer.count();
db.customer.find().count();
db.customer.find({age:{$lt:5}}).count();
db.customer.find().sort({age:1}); //升序。降序:-1
db.customer.find().skip(2).limit(3);
db.customer.find().sort({age:-1}).skip(2).limit(3);
db.customer.find().sort({age:-1}).skip(2).limit(3).count();
db.customer.find().sort({age:-1}).skip(2).limit(3).count(0);
db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);
查询集合中的文档 ,$all主要用来查询数组中的包含关系,查询条件中只要有一个不包含就不返回
查询集合中的文档 ,$or
,相当于关系型数据库中的OR,表示或者的关系
查询集合中的文档 ,$exists
,用于查询集合中存在某个键的文档或不存在某个键的文档,例如查询customer集合中存在name键的所有文档,可以使用 db.customer.find({name:{$exists:1}})
$exists:1表示真,指存在
$exists:0表示假,指不存在
更新集合中的文档,语法如下:
db.collection.update(criteria,objNew,upsert,multi)
参数说明:
criteria:用于设置查询条件的对象
objNew:用于设置更新内容的对象
upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1
multi:如果有多个符合条件的记录,是否全部更新,取值为0或1
更新集合中的文档, $set
用来指定一个键的值,如果这个键不存在,则创建它。例如:
给name为user1的文档添加address,可以使用命令:db.c1.update({name:”user1”},{$set:{address:”bj”}},0,1)
将name为user1的文档修改address为tj,其它键值对不变,命令为:
db.c1.update({name:”user1”},{$set:{address:”tj”}},0,1)
更新集合中的文档,使用 $inc
将集合中name为user1的age加1,其它键不变, $inc表示使某个键值加减指定的数值
更新集合中的文档, $unset
用来删除某个键,例如删除name为user1的文档中的address键,可以使用命令:
db.c1.update({name:”user1”},{$unset:{address:1}},0,1)
capped collection:固定集合
创建固定集合使用命令:db.createCollection(“collectionName”,{capped:true,size:100000,max:100});
size指定集合大小,单位为KB,max指定文档的数量
备份(mongodump)和恢复(mongorestore)
备份数据使用下面的命令:
mongodump -h dbhost -d dbname -o dbdirectory
-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:需要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
恢复数据使用下面的命令:
mongorestore -h dbhost -d dbname -directoryperdb dbdirectory
-h:MongoDB所在服务器地址
-d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
-directoryperdb:备份数据所在位置,例如:c:\data\dump\test