我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第6篇文章
文档基本CRUD
文档的插入
- 单个文档插入
使用insert()或save()方法向集合中插入文档,语法如下:
db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolern>
}
)
注意:
- collection集合如果不存在,则会隐式创建
- mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题
- 插入当前日期使用new Date()
- 插入的数据没有指定_id,会自动生成主键值
- 如果某字段没值,可以赋值为null,或不写该字段
- 批量插入(insertMany 或者 insert)
db.collection.insertMany(
[ <document 1> , <document 2> , ... ],
{
writeConcern: 1, // 写入策略,默认为1,即要求确认写操作,0是不要求
ordered: true // 指定是否按顺序写入,默认true
}
)
例:向评论集合批量插入数据(由于插入过多数据,容易发生插入失败,可以用try catch)
try {
db.comment.insertMany([
{"_id": "1", "comment": "第一条评论"},
{"_id": "2", "comment": "第二条评论"},
{"_id": "3", "comment": "第三条评论"},
{"_id": "4", "comment": "第四条评论"},
])
} catch (e) {
print(e)
}
- 脚本插入
for (let i=0; i<100; i++) {
db.comment.insert({ _id: i, "comment": "第" + i +"条评论" })
}
文档的基本查询
db.collection.find(<query>, [projection])
例:查询用户评论,但只最多返回符合条件的第一条记录
db.collection.findOne({ comment: "第一条评论" })
例:如果要查询结果返回部分字段,则需要使用投影查询(只显示指定的字段)
db.collection.find({ comment: "第一条评论" }, { comment: 1 }) // 1代表包含,0代表排除
db.collection.find().pretty() // 返回的结果更加易读一点
参数说明:
| 参数 | 类型 | 描述 |
|---|---|---|
| query | document(可选) | 使用查询运算符指定选择筛选器。若要返回集合中的所有文档。请省略或传递空文档({}) |
| projection | document(可选) | 指定要在与查询筛选器匹配的文档中返回的字段(投影)。例: { comment: 1, _id: 0 }) // 1代表包含,0代表排除 |
注意:
- 当使用MongoChef Core 链接mongodb的时候 ,系统默认一次只能查看20条数据
- 需要查看更多的数据时候,系统提示 type it for more
- 可以设置系统参数 DBQuery.shellBatchSize = 300
对比Mysql语法
文档的更新
- 覆盖的修改
例:修改_id为1的记录,点赞量为1001
db.comment.update({ _id: "1" }, { likenum: NumberInt(1001) })
注意:
- 执行后,文档除了likenum字段,其他字段都没了
- 局部修改
例:修改_id为2的记录, 浏览量为889
db.comment.update({ _id: "2" }, { $set: { likenum: NumberInt(889) } })
注意:
- 默认只修改第一条数据
- 批量修改
例:修改所有符合条件的数据
db.comment.update({ userid: "001" }, { $set: { nickname: "张三" }}, { multi: true } )
注意:
- 如果不加后面的参数,则只更新符合条件的第一条记录
- 列值增长的修改
例:对3号数据的点赞数,每次递增1
db.comment.update({ _id: "3" }, { $inc: { likenum: NumberInt(1) } })
文档的删除
- 删除所有数据
db.comment.remove({})
- 删除指定数据
db.comment.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
例:删除系统提供的_id=ObjectId("631e99ca7b27c9c7b63cbddf")的记录
db.comment.remove({ _id: ObjectId("631e99ca7b27c9c7b63cbddf") })
参数说明:
| 参数 | 类型 | 描述 |
|---|---|---|
| query | (可选) | 删除的文档的条件 |
| justOne | boolern(可选) | 如果设为true或1,则只删除一个文档,如果没有参数,或者false,则删除所有匹配条件的文档 |
| writeConcern | document(可选) | 抛出异常级别(一般使用系统默认级别即可) |