MongDB知识点总结

发布时间 2023-03-22 21:14:26作者: 一只鱼。

MongDB数据库操作

显示所有数据库:show dbs show databases
数据库不需要创建:use student
显示当前所在数据库
db
数据库不需要创建,集合不需要创建,集合中有数据,集合就创建了,数据库就创键了 :show collections;
添加数据 数据是文档的json格式的数据: db.stus.insert()
查询集合,查询所有数据:db.stus.find()

创建库:use 数据库名
查看当前所在数据库,show dbs,show databases
删除数据库:db.dropDatabase()
创建集合:
1.db.集合名 直接创建,
2.db.集合名.insert()创建集合并添加数据
3.db.xx.createCollection(集合名)。可以创建空集合,并且在数据库中显示
字段类型描述
capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size 数值 (可选)为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。

文档的增删改查

增加:
db.cc.insert() 插入文档
db.xx.insertOne() 插入单个文档
db.xx.insertMany() 插入多个文档
db.xx.save() 等价于文档
删除:
db.xx.remove({})
db.xx.deleteMany() 删除符合条件
db.xx.deleteOne()
修改:
db.xx.updata()
db.xx.updateOne()
db.xx.updateMany()
$set {$set:{field:value}}:指定键更新值,不存在创建
$inc {$inc:{field:value}}:对文档某个数字型的键进行增减操作
$unset {$unset:{field:1}} 主要是用来删除键
$push {$push:{field:value}} 向文档某数组添加数组,不考虑重复,键是数组,键不存在则创建。
$pushAll {$pushAll:{field:value_array}} 同$push,一次加多个数据
$addToSet {$addToSet:{field:value}} 加值值不存在才增加
$pop {$pop:{fileld:1}}: 删除数据元素 1.表示从尾部 -1表示删除头部
$pull {$pull}:{field:_value}} 从数组组中删除满足条件的值
$pullAll {$pullAll:value_array} 用法同$pull一样,可以一次性删除多个值
$rename {$rename:{oid_field_name:new_fidld_name}} 对键重新命名
%pushall 3.6取消 使用$each修饰符适用于$addToSet操作符和$push操作符
{$addToSet:{<field>:{$each:[<value>,<value>]}}}
{$push:{<field>:{$each:[<value1>,<value2>]}}}
基本查询:
db.collection.find() 查询所有结果
db.xx.count({}) 查询数量
db.xx.find({}).length() 查询结果数量
db.xx.find({}).count()

查询文档:

比较运算符:
比较运算符:
$eq{<field>:{$eq:<value>}}  查找字段的值等于特定值值记录
$gt{<field>:{$gt:value}} 查询大于字段的特定值记录
$get{<field>:{$get:value}} 查询大于等于特定值记录
$lt{<field>:{$lt:value}} 查询小于字段的特定值记录
$lte{<field>:{$lte:value}} 查询小于等于特定值记录
$ne{<field>:{$ne:value}} 查询不等于特定值的记录
逻辑运算符:
逻辑运算符
逻辑与 $and:要有满足所有查询条件,否则返回空
db.集合名.find($and:[{<expression1>,<ex...>}])
逻辑或 $or:满足一个条件就行,只要满足一个条件都可以查出来
db.集合名.find($or:[{<ex...>},{<ex...>}])
逻辑异或 $nor:逻辑或原理取反,只要满足一个条件都可以不查询出来
db.集合.find({$nor:[{<ex..>},{<ex...>}]})
范围查询
范围查询:
$in  在范围内    db.xx.find({age:[12,13]})
$nin 不在范围内  db.xx.find({age:[12,13]})
$not $in 不在范围内 db.xx.find({age:{$not:{$in:[13,13]}}})
$not 不等于  db.xx.find({name:{$not:/^T.*/}});

逻辑非 $not:取反查询条件
db.集合名.find({find:({$not:{operator-expression}})})
等值只能使用:$eq操作符
//逻辑非 db.product1.find({category:{$not:{$eq:"手机"}}})
支持正则(//)
支持正则
使用//或$regex编写正则表达式
   查询姓黄的学生
   db.stu.find({name:/^黄/})
   db.stu.find({name:{$regex:'^黄’}})
  # 模糊查询
   db.test.find({name:/李/})
  # 模糊查询:以"李" 开头
   db.test.find({name:/^李/})
  # 模糊查询:以"李" 结尾
   db.test.find({name:/李$/})
  # 模糊查询:忽略大小写
   db.test.find({name:/stephen?/i})
限制指定条数:跳过指定条数(limit() ,skip())
limit()  用于读取指定文件  db.xx.find().limit()

skip() 用于跳过指定数量的文档  db.xx.find().skip()

limit(),skip() 查询同时使用 无论位置先后 skip limit skip 适合小数据量分页,百万级效率会非常低,因为skip方法是一条条数据过去的
db.xx.find().skip().limit()
db.xx.find().limit().skip()
补充自定义查询
使用$where后面写一个函数,返回满足条件的数据查询年龄大于30的

db.xx.find({
$where.function(){
return this.age>30;
})

})
投影:
选择显示字段:
1.显示
0.不显示
常规默认不显示,如果显示使用1,只要_id不显示0

默认返回_id
db.xx.find({},{name:1,age:1})
不返回_id
db.xx.find({},{_id:0,name:1,age:1})
排序:(sort())
方法sort(),用于对集合进行排序
db.集合名称.find().sort({字段:1,...})
参数:1为升序
参数:-1为降序
根据性别降序,在根据年龄升序
db.xx.find().sort({gender:-1,age:1})
统计个数(count())
方法count()用于统计结果中文档条数
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
dn.xx.find({gender:true}).count()
消除去重(distinct())
方法distinct()对数据进行去重
db.集合名称.distinct('去重字段',{条件})

db.xx.distinct("xx",{age:{$gt:18}})
字段是否存在($existis)
$existis 字段是否存在 true 存在 false 不存在
db.test.find({age:{$existis:true}})
值为null,或字段不存在
db.xx.find({age:null})