一、数据库操作(articledb)
数据库是 MongoDB 中存储集合的容器,用于存放文章评论数据的数据库为articledb。
- 选择与创建数据库
语法:use 数据库名称
若数据库不存在,执行该命令会自动创建(但需插入数据后才会真正持久化)。
示例:use articledb(切换或创建articledb数据库)。
查看数据库:
查看所有有权限的数据库:show dbs 或 show databases。
查看当前使用的数据库:db。
命名规范:
不能包含空格、.、$、/、\、\0(空字符),需小写,最多 64 字节。
保留数据库:admin(权限根数据库)、local(本地不可复制数据)、config(分片配置)。 - 删除数据库
语法:db.dropDatabase()
仅删除当前使用的数据库,且需数据库已持久化(即存在数据)。
二、集合操作(类似关系型数据库的 “表”)
集合用于存储文章评论的文档(单条评论数据),可显式或隐式创建。 - 创建集合
显式创建(了解即可):
语法:db.createCollection("集合名称")
示例:db.createCollection("comment")(创建存储评论的comment集合)。
隐式创建(推荐):
向不存在的集合插入文档时,集合会自动创建。例如:db.comment.insert({...}) 会自动创建comment集合。
查看集合:show collections 或 show tables(查看当前数据库中的所有集合)。
命名规范:
不能以system.开头(系统集合保留),不能包含\0或$(特殊场景除外),不能为空字符串。 - 删除集合
语法:db.集合名称.drop()
示例:db.comment.drop()(删除comment集合)。
返回值:成功删除返回true,否则返回false。
三、文档操作(类似关系型数据库的 “记录”)
文档是 MongoDB 的基本数据单元,格式为 BSON(类似 JSON,支持更多数据类型),用于存储单条文章评论。 - 插入文档
单条插入:
语法:db.集合名称.insert(文档)
示例:插入一条评论:
javascript
db.comment.insert({
"articleid": "100000", // 文章ID
"content": "今天天气真好", // 评论内容
"userid": "1001", // 用户ID
"nickname": "Rose", // 用户名
"createdatetime": new Date(), // 评论时间(当前时间)
"likenum": NumberInt(10), // 点赞数(整型)
"state": null // 状态(未设置)
})
说明:
若未指定_id,MongoDB 会自动生成 ObjectID 类型的主键。
整型需用NumberInt()声明,否则默认为 double 类型。
批量插入:
语法:db.集合名称.insertMany([文档1, 文档2, ...])
示例:批量插入多条评论(可指定_id):
javascript
db.comment.insertMany([
{"_id": "1", "articleid": "100001", "content": "评论1", ...},
{"_id": "2", "articleid": "100001", "content": "评论2", ...}
])
注意:若某条插入失败,已成功插入的文档不会回滚,可使用try...catch捕获异常。
查询文档
基本查询:
语法:db.集合名称.find(查询条件, 投影字段)
示例:
查询所有评论:db.comment.find() 或 db.comment.find({})。
查询userid为1003的评论:db.comment.find({userid: "1003"})。
查询第一条符合条件的评论:db.comment.findOne({userid: "1003"})(返回单个文档)。
投影查询(指定返回字段):
语法:find(条件, {字段1: 1, 字段2: 1, _id: 0})(1 表示显示,0 表示隐藏)。
示例:查询userid=1003的评论,只显示userid和nickname,隐藏_id:
javascript
db.comment.find({userid: "1003"}, {userid: 1, nickname: 1, _id: 0})更新文档
语法:db.集合名称.update(查询条件, 更新内容, 选项)
选项:multi: true(批量更新,默认只更第一条)、upsert: true(无匹配时插入新文档)。
常用更新方式:
局部修改(使用$set,只更新指定字段):
示例:将_id=2的评论点赞数改为 889:
javascript
db.comment.update({_id: "2"}, {$set: {likenum: NumberInt(889)}})
批量修改:
示例:将所有userid=1003的用户名改为 “凯撒大帝”:
javascript
db.comment.update({userid: "1003"}, {$set: {nickname: "凯撒大帝"}}, {multi: true})
数值增减(使用$inc):
示例:将_id=3的评论点赞数 + 1:
javascript
db.comment.update({_id: "3"}, {$inc: {likenum: NumberInt(1)}})
覆盖修改(不推荐):直接替换文档(会删除未指定的字段)。
- 删除文档
语法:db.集合名称.remove(删除条件)
示例:
删除_id=1的评论:db.comment.remove({_id: "1"})。
删除所有评论(慎用):db.comment.remove({})。 - 高级查询(分页、排序、统计)
统计查询:
语法:db.集合名称.count(查询条件)
示例:
统计所有评论数:db.comment.count()。
统计userid=1003的评论数:db.comment.count({userid: "1003"})。
分页查询(skip()跳过前 N 条,limit()取 N 条):
语法:db.集合名称.find().skip(跳过数量).limit(获取数量)
示例:每页 2 条,查询第 2 页(跳过前 2 条,取 2 条):
javascript
db.comment.find().skip(2).limit(2)
排序查询(sort(),1 升序,-1 降序):
语法:db.集合名称.find().sort({字段1: 1, 字段2: -1})
示例:按userid降序、likenum升序排列:
javascript
db.comment.find().sort({userid: -1, likenum: 1})
执行顺序:sort() → skip() → limit()(与命令顺序无关)。