MongoDB增删改查操作
删除数据库和数据集合(表)
删除数据库,删除当前所在的数据库
db.dropDatabase()
删除集合(表)
db.grade.drop()
如果当前集合存在则直接删除,并返回 true ,否则返回false
插入数据记录
插入数据
插入一条数据,返回值是插入的id
db.student.insertOne({'name':'zhangsan','age':30});
插入数据,返回值是插入的数量
db.student.insert({'name':'zhangsan','age':40});
插入多条文档数据
db.student.insertMany([{'name':'李四','age':34},{'name':'赵六','age':66}])
注意:里面是数组包对象的格式
查找数据记录
查找所有记录
db.userInfo.find(); 相当于:select* from userInfo;
查询name=张三的数据
db.student.find({'name':'zhangsan'});
相当于: select * from student where name = zhangsan;
查询去除重复后的数据 distinct
db.student.distinct("name");
会过滤掉 name 中的相同数据 相当于:select distict name from student;
查询age=34
db.student.find({'age':34});
相当于: select * from student where age = 34;
如果有,直接返回结果;没有则为空
查看age>34
db.student.find({'age':{$gt:34}})
相当于:select * from student where age >34;
查看age<34
db.student.find({'age':{$lt:34}})
相当于:select * from student where age <34;
查看 age>=34
db.student.find({'age':{$gte:34}})
相当于:select * from student where age >=34;
查看 age<=34
db.student.find({'age':{$lte:34}})
相当于:select * from student where age <=34;
查看 age >=20 并且 age <= 40
db.student.find({'age':{$gte:20,$lte:40}});
模糊查询-查询名称中带有 a 的
db.student.find({'name':/a/});
//相当于%%
select * from student where name like '%a%';
查询名称是以j开头的 ^
db.student.find({'name':/^j/})
相当于 select * from student where name like 'j%';
查询名称是以k结尾的 $
db.student.find({'name':/k$/})
相当于 select * from student where name like '%k';
查询指定列,查询age,1表示使用当前这个字符
db.student.find({'age':{$gte:34}},{name:1});
相当于:select name from student where age >=34;
升序和降序 sort
db.student.find().sort({age:1}); 升序 db.student.find().sort({age:-1}); 降序
查询指定条数 limit
db.student.find().limit(3);
相当于 select * from student limit(5);
按照升序排序,获取前三条数据
db.student.find().sort({age:1}).limit(3);
查询在 3-5 之间的数据
db.student.find().limit(5).skip(3);
可用于分页,limit 是 pageSize,skip 是第几页*pageSize
or 与查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]}); 相当于:select * from userInfo where age = 22 or age = 25;
findOne 查询第一条数据
db.student.findOne(); db.student.find().limit(1);
查询某个结果集的记录条数 统计数量
db.student.find({age: {$gte: 25}}).count(); 相当于:select count(*) from userInfo where age >= 20; 如果要返回限制之后的记录数量,要使用 count(true)或者 count(非 0) db.student.find().skip(5).limit(2).count(true);
mongodb整个操作,跟js非常相似,使用的都是 链式操作 + 方法 + 参数值
修改数据记录
update() 方法用于更新已存在的文档
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如,,inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
将jack的年龄年龄更改为 16 岁:
db.student.update({"name":"jack"},{$set:{"age":16}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
nMatched 相配的
nUpserted 插入的
nModified 修改的
将zhangsan的年龄修改为18
db.student.update({"name":"zhangsan"},{$set:{"age":18}});
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
db.student.update({"name":"jack"},{$set:{"age":16}} ,{multi: true});
修改王五的名称为‘王中王’,年龄为21
db.student.update({"name":"王五"},{"name":"王中王","age":21});
完整替换,不出现$set 关键字了
db.student.update({"name":"小明"},{"name":"大明","age":16});
db.users.update({name: 'lisi'}, {$inc: {age: 30}}, false, true); 相当于:update users set age = age + 30 where name = 'Lisi';
在3.2版本开始,MongoDB提供以下更新集合文档的方法:
db.collection.updateOne() 向指定集合更新单个文档
db.collection.updateMany() 向指定集合更新多个文档
更新单个文档
db.student.updateOne({"name":"李四"},{$set:{"age":"28"}})
更新多个文档
db.student.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
删除数据
remove() 方法的基本语法格式如下所示:
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。默认为false,可以删除多条
- writeConcern :(可选)抛出异常的级别。
db.student.remove({age: 18});