MongoDB学习笔记

201 阅读2分钟

一.Navicat创建mongodb连接

image.png

image.png

二.创建集合

image.png

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})

image.png

5.新增多条数据超出问题

 for(var i=1;i<=10;i++){
   db.cap1.insert({name:"lisi",age:i});
}

如果大小超过了1000,就会显示后几条数据

当我把10改成100后

  1. cap1:(只有20条的数据)

image.png

  1. cap2:(完整拥有100条的数据)

image.png

四.删除数据

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)

image.png

跳过了两个数据

image.png

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}})

image.png

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]}})

image.png

13.是否存在$exists

//如果存在则返回 
db.cap2.find({"love": {"$exists": true}})
//如果不存在则返回 
db.cap2.find({"love": {"$exists": false}})

14.正则表达式

//i是忽略大小写
db.cap2.find({"name":/xi/i})

image.png

15.类型查询

//只有当hobby的类型是数组才匹配 
db.cap2.find({"hobby": {"$type": 4}})

16.取反

db.cap2.find({"name": {"$not": /lisi/i}})

image.png

17.统计

db.cap2.find().count()

image.png