推荐网站
准备事项
- 安装mongdb
- 建议使用docker安装,Docker教程
常用命令
数据库命令
-- 创建数据库
use articledb
-- 查看当前所有库(新建的数据库如果没有集合不会显示)
show dbs
show databases
-- 查看正在使用的数据库
db
-- 删除数据库
db.dropDatabase("articledb")
-- 创建集合(表)
db.createCollection("mycollections")
-- 查看数据库内所有集合(表)
show tables
show collections
-- 删除集合(表)
db.mycollections.drop()
-- 插入一条文档(数据)
-- 如果不存在comment数据库则隐性创建
-- 可以指定_id主键值,不指定则由系统生成UUID
db.comment.insert(
{
"articleid": "100000",
"content": "今天天气真好,阳光明媚",
"userid": "1001",
"nickname": "Rose",
"createdatetime": new Date(),
"likenum": NumberInt(10),
"state": null
}
)
-- 批量插入文档(数据)
-- 批量插入不会因为异常回滚,可以用try-catch捕获异常并打印
-- 数字格式不支持可以使用NumberInt转换格式
try{
db.comment.insertMany([
{
"_id": "1",
"articleid": "100001",
"content": "我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我他。",
"userid": "1002",
"nickname": "相忘于江湖",
"createdatetime": new Date("2019-08-05T22:08:15.522Z"),
"likenum": NumberInt(1000),
"state": "1"
},
{
"_id": "2",
"articleid": "100001",
"content": "我夏天空腹喝凉开水,冬天喝温开水",
"userid": "1005",
"nickname": "伊人憔悴",
"createdatetime": new Date("2019-08-05T23:58:51.485Z"),
"likenum": NumberInt(888),
"state": "1"
},
{
"_id": "3",
"articleid": "100001",
"content": "我一直喝凉开水,冬天夏天都喝。",
"userid": "1004",
"nickname": "杰克船长",
"createdatetime": new Date("2019-08-06T01:05:06.321Z"),
"likenum": NumberInt(666),
"state": "1"
},
{
"_id": "4",
"articleid": "100001",
"content": "专家说不能空腹吃饭,影响健康。",
"userid": "1003",
"nickname": "凯撒",
"createdatetime": new Date("2019-08-06T08:18:35.288Z"),
"likenum": NumberInt(2000),
"state": "1"
},
{
"_id": "5",
"articleid": "100001",
"content": "研究表明,刚烧开的水千万不能喝,因为烫嘴。",
"userid": "1003",
"nickname": "凯撒",
"createdatetime": new Date("2019-08-06T11:01:02.521Z"),
"likenum": NumberInt(3000),
"state": "1"
}
]);
}catch(e) {
print(e);
}
集合(表)命令
-- 查询全部文档(数据)
db.comment.find()
db.comment.find({})
-- 只查询一条
db.comment.findOne()
-- 根据userid查询
db.comment.find({userid:'1003'})
-- 投影查询(指定数据列)
-- 默认_id会显示,除非指定_id:0
db.comment.find({userid:"1003"},{userid:1,nickname:1})
-- 覆盖更新
db.comment.update({_id:"1"},{likenum:NumberInt(1001)})
-- 局部更新
db.comment.update({_id:"2"},{$set:{likenum:NumberInt(889)}})
-- 批量更新(不携带{multi:true}默认只会修改第一条)
db.comment.update({userid:"1003"},{$set:{nickname:"凯撒大帝"}},{multi:true})
-- 自增$inc
db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}})
-- 全部删除
db.comment.remove({})
-- 根据条件删除
db.comment.remove({_id:"1"})
-- aggregate聚合操作(group by)
-- $sum $avg $min $max
db.comment.aggregate([{
$group: {
_id: "$nickname",
num_tutorial: {
$sum: 1
}
}
}])
-- count求和
db.comment.count()
db.comment.count({userid:"1003"})
-- 分页
-- 第一页(每页三条)
-- limit:每页显示数量;skip:跳过前几行数据
db.comment.find().skip(0).limit(3)
db.comment.find().skip(3).limit(3)
-- 排序(1:asc;-1:desc)
db.comment.find().sort({userid:-1,likenum:1})
-- 正则表达式查询
db.comment.find({content:{$regex:"开水"}})
db.comment.find({content:/^专家/})
-- 比较查询
-- $ne != $gt > $lt < $gte >= $lte <=
db.comment.find({likenum:{$ne:NumberInt(1000)}})
-- 包含查询(IN NOT IN)
-- 包含
db.comment.find({userid:{$in:["1003","1004"]}})
-- 不包含
db.comment.find({userid:{$nin:["1003","1004"]}})
-- AND查询
db.comment.find({
$and: [{
likenum: {
$gte: NumberInt(700)
}
}, {
likenum: {
$lt: NumberInt(2000)
}
}]
})
-- OR查询
db.comment.find({
$or: [{
userid: "1003"
}, {
likenum: {
$lt: 1000
}
}]
})
索引操作
-- 查看所有索引
db.comment.getIndexes()
-- 创建单列索引
db.comment.createIndex({userid:1})
-- 创建复合索引
db.comment.createIndex({userid:1,nickname:1})
-- 删除索引
-- 指定索引名
db.comment.dropIndex("userid_1_nickname_-1")
-- 指定索引规则
db.comment.dropIndex({userid:1,nickname:1})
-- 删除所有索引
db.comment.dropIndexes()
-- 执行计划explain
db.comment.find({userid:"1003"}).explain()
- 索引涵盖(等同于数据库的覆盖索引)
如果要查询的所有字段都是索引字段,查询完索引后会直接返回结果集