库的增删改查
建库,使用库
use databases -- 当数据库不存在时会创建数据库并进入
查库
show dbs -- 查看所有的db
db -- 查看当前进入的db
删除库
db.dropDatabase() -- 删除所选(进入的)数据库, 如果没有选择会删除默认的test数据库
表(集合: Collection)的增删改查
建表
db.createCollection(name, options) -- name表名, options配置信息
db.CollectionName -- 如同建库, 当表不存在时创建
查表
show tables
show collections
删表
db.CollectionName.drop()
改表
数据(Documents)的增删改查
增加数据行
db.CollectionName.insert(document) -- 可以传递一个对象添加一个, 或者传递一个数组添加多个
-- 官方推荐的写法
db.CollectionName.insertOne(document) -- 返回的有新添加document的_id
db.CollectionName.insertMany(document) -- 返回的有新添加document的_id的列表
删除数据行
db.CollectionName.remove({条件},justOne) -- justOne如果设置true或1,只会删除一个文档, 如果不写条件会删除所有的文档
官方推荐写法
db.CollectionName.deleteOne({条件}) -- 删除一条数据
db.CollectionName.deleteMany({条件}) -- 删除多条数据
查看数据行
db.CollectionName.find({条件}) -- 查询满足条件的
db.CollectionName.findOne({条件}) -- 查询一条满足条件的
修改数据行
db.CollectionName.updata({条件},{$set:{更新信息}}) -- 默认只更新一个, 需要在参数里添加一个{multi:true}的字典
db.CollectionName.updataOne({条件},{$set:{更新信息}}) -- 更新一个
db.CollectionName.updataMany({条件},{$set:{更新信息}}) -- 更新多个
db.CollectionName.save({_id:ObjectId(),NEW_DATA}) -- 根据_id来更新
$构造条件
{k:v,k1:v1} -- 多kv的and关系, 如果k对应的是一个数组, 而v是一个元素, 会判断这个数组里有没有这个元素
{$or:[{},{}]} -- $or构造or关系
{$and:[{},{}]} -- $and构造and关系
{$in:[{k:[v,v,v,v]},{}]} -- $in存在与
{$all:[{k:[v,v,v,v]},{}]} -- $all子集关系
-- 比较关系
{<key>:{$eq:<value>}} -- 等于
{<key>:{$lt:<value>}} -- 小于
{<key>:{$lte:<value>}} -- 小于等于
{<key>:{$gt:<value>}} -- 大于
{<key>:{$gte:<value>}} -- 大于等于
{<key>:{$ne:<value>}} -- 不等于
$修改器
上面介绍的$set简单粗暴, 直接是重新设置, 娶她相似的还有很多
$inc -- 进行自增操作
db.table.updataOne({'score':20},{$inc:{"score":1}})
$unset -- 用来删除一个键
db.table.updataOne({'score':20},{$unset:{"score":1}})
$push -- 向数组中添加元素
db.table.updataOne({'score':20},{$push:{"list_key":1}})
$pull -- 删除数组中的指定元素
db.table.updataOne({'score':20},{$pull:{"list_key":1}})
$pop -- 删除数组第一或最后一个元素
db.table.updataOne({'score':20},{$pop:{"list_key":1}}) -- 1删除最后, -1删除最前
-- 元组指定索引设定
db.user_info.updateOne({hobby:6},{$set:{"hobby.6":"六"}}) -- 注意hobby对应的是个数组,
-- 上面这个命令意思是找到第一个hobby里面有6的把第六个元素设置为六
-- 当我们不知道索引是多少时, 可以使用$字符
db.user_info.updateOne({hobby:6},{$set:{"hobby.$":"六"}}) -- $代表了前面条件中6的索引
-- object操作
db.user_info.updateOne({name:"200wansui"},{$inc:{"info.tizhong":-5}})
db.user_info.updateOne({name:"200wansui"},{$set:{"info.long":12.5}})
-- array+object, 数组中存在字典, 取值时可以取键, 而设置时需要制定索引
db.user_info.updateOne({"hobby.shengao":150},{$set:{"hobby.$.long":14}}) -- hobby是个数组, 其中存着一个对象
排序分页
-- limit
db.user_info.find({}).limit(5)
选取数据从当前位置选择5个
-- skip 跳过
db.user_info.find({}).skip(2)
从0开始跳过2条数据为当前位置
-- sort
db.user_info.find({}).sort({ id:-1 })
根据ID进行排序 -1倒叙 1正序
-- limit+skip+sort
db.user_info.find({}).limit(5).skip(10)
db.user_info.find({}).limit(c).skip((p-1)*c)
db.user_info.find({}).limit(5).skip(5).sort({ id:-1 })
-- 优先级最高的是 sort
-- 其次优先为 skip
-- 最低优先级 limit
mongoDB数据类型