一,以MySql为例,和Mongodb的对比
MySql术语 | MongoDB术语 | 说明 |
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 行/文档 |
column | field | 字段/域 |
index | index | 索引 |
primary key | primary key | 主键,Mongodb自动将_id作为主键 |
二,基础语法
1,创建集合
db.createCollection("test");
2,插入文档
mongodb的save和insert函数都可以向collection里插入数据,但两者是有两个区别:
一、使用save函数里,如果原来的对象不存在,那他们都可以向collection里插入数据,如果已经存在,save会调用update更新里面的记录,而insert则会忽略操作
二、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。
db.test.insert({code:"001",name:"张三",mobile:"18101607001",sex:"1",height:177,score:100,remark:"测试1"});
db.test.insert({code:"002",name:"李四",mobile:"18101607002",sex:"0",height:160,score:98,remark:"测试2"});
db.test.insert({code:"003",name:"王五",mobile:"18101607003",sex:"1",height:178,score:96,remark:"测试3"});
db.test.insert({code:"004",name:"赵六",mobile:"18101607004",sex:"1",height:181,score:71,remark:"测试4"});
db.test.insert({code:"005",name:"李磊",mobile:"18101607005",sex:"1",height:177,score:58,remark:"测试5"});
db.test.insert({code:"006",name:"石雷",mobile:"18101607006",sex:"0",height:160,score:60,remark:"测试6"});
db.test.insert({code:"007",name:"王风",mobile:"18101607007",sex:"1",height:178,score:67,remark:"测试7"});
db.test.insert({code:"008",name:"石川",mobile:"18101607008",sex:"1",height:181,score:89,remark:"测试8"});
3,更新文档
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如, ,,inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
1).更新一条数据。此处是将name属性的内容”fx“的第一条数据内容改为”jintianshigehaorizi“。
例(将赵六的性别修改为0):
db.test.update({name:"赵六"}, {$set:{sex:"0"}});
2).更改多条数据:
例(将性别为0的备注清空):
db.test.updateMany({sex:"0"}, {$set:{remark:""}});
4,删除文档
方法一:remove()方法
1、MongoDB中的 remove()方法用于从集合中删除文档。
2、remove()方法接受两个参数。
criteria – (可选)符合删除条件的集合将被删除。
justOne – (可选)如果设置为true或1,则只删除一个文档。
3、删除集合col下全部文档
例(清空整个集合):
db.test.remove({});
方法二:deleteOne()方法
1、deleteOne()方法是官方推荐删除文档的方法。
2、该方法只删除满足条件的第一条文档。
3、删除指定条件的文档:删除 age等于 18 的一个文档
例(删除性别为0的第一个文档):
db.test.deleteOne({sex:"0"});
方法三:deleteMany()方法
1、deleteMany方法是官方推荐的删除方法。
2、该方法删除满足条件的所有数据。
3、删除集合col下全部文档
例(删除性别为0的所有文档):
db.test.deleteMany({sex:"0"});
5,查询文档
1,基本查询:
db.collectionName.find({ key: value })
这将返回集合"collectionName"中所有满足条件"key"等于"value"的文档。
例(查询姓名为张三的文档):
db.test.find({name:"张三"});
2,查询特定字段
db.collectionName.find({}, { key: 1 })
这将返回集合"collectionName"中所有文档,但只包含"key"字段。
例(仅查询手机号):
db.test.find({name:"张三"},{"mobile":1});
3,范围查询
查询 身高>= 177 并且 身高 <= 178 注意书写格式
db.test.find({height:{$gte:177,$lte:178}});
4,in
db.test.find({code:{$in:["001","002"]}});
5,not in
db.test.find({code:{$nin:["001","002"]}});
6,and
db.test.find({$and:[{code:"001"},{name:"张三"}]});
7,or
db.test.find({$or:[{code:"001"},{name:"李四"}]});
8,count
db.test.count({$or:[{code:"001"},{name:"李四"}]});
9,模糊查询
db.test.find({remark:/试/});
db.test.find({remark:/^测/});
10,聚合查询
db.test.aggregate([{$match:{sex:"1"}},{$group:{_id:"$height",sumInfo:{$sum:"$score"},countInfo:{$sum:1}}}]);
6,Limit和Skip
1,查询前 2条数据
db.test.find().limit(2);
相当于:select top 2 * from test;
2,查询 2 条以后的数据
db.test.find().skip(2);
相当于:select * from test where id not in (
select top 2 * from userInfo
);
3,查询在 2-4 之间的数据
db.test.find().limit(4).skip(2);
可用于分页,limit 是 pageSize,skip 是第几页*pageSize
7,排序
升序:
db.test.find().sort({height:1});
降序:
db.test.find().sort({height:-1});
8,删除集合
db.test.drop();