在MongoDB中,第一步也是创建数据库和集合。数据库用于存储所有集合,而集合又用于存储所有文档。这些文档将依次包含相关的“字段名”和“字段”值。JSON中的key-value形式。
1、使用数据库、创建数据库(相当于集合)
- 使用“use”命令创建数据库
- 使用insert()创建集合/表
- 使用insert()命令添加文档
-- 创建数据库
use zhw
-- 查看数据库
show dbs
-- 显示当前的数据集合(mysql 中叫表)
show collections
-- 删除集合,删除指定的集合 删除表 删除集合 db.COLLECTION_NAME.drop()
db.zhw.drop()
-- 删除数据库,删除当前所在的数据库
db.dropDatabase();
数据库要想创建成功,那么必须插入一个数据。数据库中不能直接插入数据,只能往集合(collections)中插入数据。下面命令表示给 itying 数 据库的 user 表中插入数据。
2.插入数据 (插入数据,随着数据的插入,数据库创建成功了,集合也创建成功了。)
-- 插入一条数据
db.zhw.insert({ item: "card", qty: 15 });
-- 插入多条数据
db.zhw.insertMany( [
{ item: "card", qty: 15 },
{ item: "envelope", qty: 20 },
{ item: "stamps" , qty: 30 }
] );
3.查询所有数据(带条件和不带条件)
-- 不带条件
db.zhw.find();
-- 带条件
db.zhw.find({"item":"card"});
-- 查询 qty>20
db.zhw.find({"qty":{$gt:20}})
-- 查询去掉后的当前聚集集合中的某列的重复数据
db.zhw.distinct("qty");
-- 查询 qty<22 的记录
db.zhw.find({qty:{$lt:22}});
-- 查询 qty>=25 的记录
db.zhw.find({qty:{$gte:25}});//相当于:select*from zhw where qty>=25;
-- 查询 qty<=25 的记录
db.zhw.find({qty:{$lte:25}});
--查询 qty>=23 并且 qty<=26 注意书写格式
db.zhw.find({qty:{$gte:23,$lte:26}});
-- 查询 name 中包含 mongo 的数据 模糊查询用于搜索
db.zhw.find({name:/mongo/});//相当于%% select * from zhw where name like ‘%mongo%’;
-- 查询 name 中以 mongo 开头的
db.zhw.find({name:/^mongo/});//select * from zhw where name like ‘mongo%’;
-- 查询指定列 name、qty 数据
-- 相当于:select name,qty from zhw ;当然 name 也可以用 true 或 false,
-- 当用 ture 的情况下河 name:1 效果一样,如果用 false 就 是排除 name,显示 name 以外的列信息
db.zhw.find({},{name:1,qty :1});
-- 查询指定列 name、qty 数据,qty >25
-- 相当于:select name,qty from zhw where qty >25;
db.zhw .find({qty :{$gt:25}},{name:1,qty :1});//
-- 按照qty 排序 1 升序 -1 降序
升序: db.zhw.find().sort({qty:1});
降序: db.zhw.find().sort({qty:-1});
-- 查询 name=zhangsan,qty=22 的数据
--相当于:select * from zhw where name= ‘zhangsan’ and qty= ‘22’;
db.zhw.find({name:'zhangsan',qty:22});
-- 查询前 5 条数据
db.zhw.find().limit(5);//相当于:select top5* from zhw;
-- 查询 10 条以后的数据
db.zhw.find().skip(10);
-- 查询在 5-10 之间的数据 可用于分页,limit 是 pageSize,skip 是(page-1)*pageSize
db.zhw.find().limit(10).skip(5);
-- or 与 查询 相当于:select * from zhw where qty=22 or qty=25;
db.zhw.find({$or:[{qty:22},{qty:25}]});
-- findOne 查询第一条数据 相当于:select top1* from zhw;
db.zhw.findOne();
db.zhw.find().limit(1);
-- 查询某个结果集的记录条数 统计数量
--相当于:select count(*) from user where qty>=20;
db.zhw.find({qty:{$gte:25}}).count();
-- 如果要返回限制之后的记录数量,要使用 count(true)或者 count(非 0) db.zhw.find().skip(10).limit(5).count(true);
游标:
当使用db.collection.find()函数在集合中搜索文档时,结果将返回指向文档集合的指针,该指针称为游标。默认情况下,返回查询结果时,游标将自动进行迭代。当然可以一个接一个明确展示游标中返回的结果目录。下面的例子,在我们的集合中有3个文档,光标对象将指向第一个文档,然后遍历该集合的所有文档。
MongoDB中的主键:
在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的ObjectID值。 该主键还可以自定义如:
db.zhw.insert({"_id":1, "item": "card", qty: 15 });
db.zhw.find({"_id":1});
4.查询去掉后的当前聚集集合中的某列的重复数据
db.zhw.distinct("qty");
5.修改数据
-- 更新一条数据
db.zhw.update({"item":"card"},{$set:{"qty":11}});
-- 全部更新
db.zhw.update({"item":"card"},{$set:{"qty":11}},{multi:true});
另一种写法:
db.zhw.update({item:'card'},{$inc:{qty:50}},false,true);
相当于:update zhw set qty=qty+50 where item= ‘card’;
db.zhw.update({item:'card'},{$inc:{qty:50},$set:{item:'hoho'}},false,true);
相当于:update zhw set qty=qty+50,item= ‘hoho’ where item= ‘card’;
6.删除数据
-- 删除一条数据
db.zhw.remove( {"item":"card"},{justOne:true})
-- 删除多条数据
db.restaurants.remove( {"item":"card"})
官方文档:https://docs.mongodb.com/manual/sharding/
社区:https://mongoing.com/archives/docs/mongodb初学者教程/mongodb分片