MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系型数据库和菲关系型数据库(nosql)之间的产品,是份关系数据库中功能最丰富,最像关系数据库的。
MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
特点:面向集合存储,易存储对象类型的数据
支持查询,以及动态查询
支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言
支持存储格式为BSON(一种JSON的扩展)
支持复制和故障恢复和分片
以下是MongoDB的基础操作:
库操作
- 查询所有库: show dbs; 默认只有一个local库,还有一个默认隐藏不可见的数据库 admin
- 显示当前库: db
- 选中一个库: use 库名; 存在库使用当前库 不存在则创建当前库
- 删除一个库: db.dropDatebase(); 选中那个库,删除的就是当前选中的库
- 修改当前库名:
集合操作
创建一个集合:
显式创建:db.createCollection("t_product");
隐式创建:db.t_product.insert({"name":"iphone","color":["黑色","金色","银色"],...})2
删除一个集合: db.集合名.drop();
查询所有集合: show collections;
修改集合名称:
数据操作
集合中添加数据:
向集合中插入一条数据:db.t_product.insert({"name":"iphone","price":5000,date:"2018-07-07"});
向集合中插入多条数据:db.t_product.insert([{"name":"iphone",...},{"name":"huaweiP10",...},{"name":"xiaomi8",...},...]);
集合中删除数据:db.集合名.remove({});删除所有数据,保留空的集合
db.集合名.remove({删除条件});删除满足条件的所有数据
集合中修改数据:db.集合名.update({条件},{更新内容});
db.t_product.update({"name":"iphone"},{"name":"ipad"});先将符合条件的全部删除,然后重新添加新的内容
db.t_product.update({"name":"iphone"},{$set:{"name":"ipad"}});保留原来的数据修改,但只是修改符合条件的第一条数据
db.t_product.update({"name":"iphone"},{$set:{"name":"ipad"}},{multi:true});保留原来的数据修改,修改符合条件的所有数据
db.t_product.update({"name":"iphone"},{$set:{"name":"ipad"}},{mulit:true,upsert:true});保留原来的数据修改,修改符合条件的所有数据,没有条件符合的时候插入数据
db.t_product.update({"name":"iphone"},{$inc:{"num":1}},{multi:true,upsert:true});在保留原始数据同时给符合条件的所有num这列的值自增指定的大小
集合中查询数据:
普通查询:db.t_product.find();
db.t_product.find({条件});
db.t_product.find({条件},{显示字段①:1,显示字段②:0});
1:该字段显示,0:该字段不显示,1和0不能同时出现
排序查询:db.t_product.find().sort({排序条件①:1,排序条件②:-1});
1:升序,-1:降序,两个条件时,在条件①相同的情况下根据条件②排序
分页查询:db.t_product.find().sort({排序条件}).skip(起始条数).limit(偏移量/pageSize);
类似于mysql的分页查询
总数查询:db.t_product.count();
db.t_product.find({条件}).count();
模糊查询:db.t_product.find({"name":/xiaohei/});
/xiaohei/为正则表达式,类似于?xiaohie?
等值查询:db.t_product.find({"name":"xiaohei"});
db.t_product.find({name:{$seq:"xiaohei"}});
且查询: db.t_product.find({"name":"xiaohei","age":23});
db.t_product.find({$and:[{"name":"xiaohei"},{"age":23}]});
或查询: db.t_product.find({$or:[{"name":"xiaohei"},{"name":"xiaozhang"}]});
比较查询:db.t_product.find({"age":{"$gte":23,"$lte":30}});查询年龄在[23,30]闭区间的数据
> $gt < $lt >= $gte <= $lte
$nor查询:db.t_product.find({$nor:[{"name":"xiaohei"},{"name","xiaozhang"},...]});查询xiaohei和xiaozhang之外的所有人
[]中可以写单个数据也可以写多个数据,表示既不也不的意思
查询中可以多条件合并查询,具体就不一一列出示例,具体问题具体分析,注意花括号的内外嵌套,不要迷乱。
修改库名和集合名暂未掌握!!!