一.Navicat创建mongodb连接
二.创建集合
1.创建固定集合:
db.createCollection("cap1",{capped:true,size:1000,max:100});
2.创建非固定集合:
db.createCollection("cap2");
三.新增数据
1.插入一条数据,若插入的数据主键已经存在则不保存数据
db.cap1.insert({name:"zhangsan",age:17});
2.如果不指定_id字段,save()方法类似于insert() 方法。如果指定_id字段,则会更新 _id的数据。(新版本已经废弃)
db.cap1.save({name:"zhangsan",age:17});
3.向指定集合中插入一条文档数据, 可指定参数
db.cap1.insertOne({name:"zhangsan",age:17})
4.向指定集合中插入多条文档数据, 可指定参数
db.cap1.insertMany({name:"zhangsan",age:17},{name:"zhangsi",age:18})
5.新增多条数据超出问题
for(var i=1;i<=10;i++){
db.cap1.insert({name:"lisi",age:i});
}
如果大小超过了1000,就会显示后几条数据
当我把10改成100后
- cap1:(只有20条的数据)
- cap2:(完整拥有100条的数据)
四.删除数据
1.删除所有
db.cap2.remove({})
2.删除所有符合条件的
db.cap2.remove({"age":20})
3.删除所有
db.cap2.deleteMany({})
4.删除第一条符合条件的
db.cap2.deleteOne({ status: "D"})
五.修改更新
1.将集合中名称为wangwu的用户的age修改为8:
db.cap2.update({'name':'wangwu'},{$set:{'age': 90}})
2.更新一条,将集合中名称为zhangsan的第一个用户的age修改为91:
db.cap2.updateOne({'name':'zhangsan'},{$set:{'age': 91}})
3.更新多条,将集合中所有名称为wangwu的用户的age修改为88:
db.cap2.updateMany({'name':'wangwu'},{$set:{'age': 88}})
4.替换1条,替换第一天name为xixi的数据为{ name:"wangsan",age:5 }
db.cap2.replaceOne({'name':'xixi'},{ name:"wangsan",age:5 })
六.查询
1.返回全部键
db.cap2.find({'name':'wangsan'})
2.返回指定键
db.cap2.find({},{'_id':1,'name':1})
3.多条件查询 and
db.cap2.find({'name':'zhangsan', 'age': 22})
3.多条件查询 or
db.cap2.find({$or:[{'name':'zhangsan'},{'age': 5}]})
4.多条件查询 or和and结合
db.cap2.find({'age': {$gt:8},$or:[{'name':'zhangsan'},{'name': 'lisi'}]})
5.条件操作符
-
大于
db.cap2.find({age : {$gt : 3}})
-
大于等于
db.cap2.find({age : {$gte : 3}})
-
小于
db.cap2.find({age : {$lt : 20}})
-
小于等于
db.cap2.find({age : {$lte : 20}})
-
大于XX,小于XX
db.cap2.find({age : {$lt :8, $gt : 25}})
-
不等于
db.cap2.find({age : {"$ne": 5}})
-
like条件查询
db.cap2.find({'name': /z/})
6.控制方数量
-
limit()
db.cap2.find({'name':'zhangsan'}).limit(3)
-
skip()跳过指定数量的数据
db.cap2.find({'name':'zhangsan'}).skip(1)
-
limit和skip结合
db.cap2.find({'name':'zhangsan'}).limit(3).skip(2)
跳过了两个数据
7.排序
//按照年龄升序
db.cap2.find().sort({age:1})
//按照年龄降序
db.cap2.find().sort({age:-1})
8.多个元素的查询
只有hobby数组同时存在eat和play才会匹配
db.cap2.find({"hobby": {"$all": ["eat", "play"]}})
9.限制数组长度查询
数组的长度是2才会匹配
db.cap2.find({"hobby": {"$size": 2}})
10.返回特定数量
-
返回第一个
db.cap2.find({"name":"yqq"},{"hobby":{"$slice":[0,1]}}).pretty() // 返回第1个
-
返回最后一个
db.cap2.find({"name":"yqq"},{"hobby":{"$slice":[-1,1]}}).pretty() // 返回最后一个
-
返回第几个到第几个
db.cap2.find({"name":"yqq"},{"hobby":{"$slice":[0,2]}}).pretty()
11.元素匹配,匹配数组内的元素 $elemMatch
只有a=1且b>2才会匹配
db.cap2.find({"hobby": { "$elemMatch": {a: 1, b: {"$gt": 2}}}})
12.取模 $mod
匹配 age % 5 == 1
db.cap2.find({"age": {$mod: [5, 1]}})
13.是否存在$exists
//如果存在则返回
db.cap2.find({"love": {"$exists": true}})
//如果不存在则返回
db.cap2.find({"love": {"$exists": false}})
14.正则表达式
//i是忽略大小写
db.cap2.find({"name":/xi/i})
15.类型查询
//只有当hobby的类型是数组才匹配
db.cap2.find({"hobby": {"$type": 4}})
16.取反
db.cap2.find({"name": {"$not": /lisi/i}})
17.统计
db.cap2.find().count()