Mongodb(文档基本CRUD)

619 阅读3分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第6篇文章

文档基本CRUD

文档的插入

  1. 单个文档插入
使用insert()或save()方法向集合中插入文档,语法如下:
db.collection.insert(
    <document or array of documents>,
    {
        writeConcern: <document>,
        ordered: <boolern>
    }
)

注意:

  • collection集合如果不存在,则会隐式创建
  • mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题
  • 插入当前日期使用new Date()
  • 插入的数据没有指定_id,会自动生成主键值
  • 如果某字段没值,可以赋值为null,或不写该字段
  1. 批量插入(insertMany 或者 insert)
db.collection.insertMany(
    [ <document 1> , <document 2> , ... ],
    {
        writeConcern: 1, // 写入策略,默认为1,即要求确认写操作,0是不要求
        ordered: true // 指定是否按顺序写入,默认true
    }
)
例:向评论集合批量插入数据(由于插入过多数据,容易发生插入失败,可以用try catchtry {
    db.comment.insertMany([
        {"_id": "1", "comment": "第一条评论"},
        {"_id": "2", "comment": "第二条评论"},
        {"_id": "3", "comment": "第三条评论"},
        {"_id": "4", "comment": "第四条评论"},
    ])
} catch (e) {
    print(e)
}
​
  1. 脚本插入
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() // 返回的结果更加易读一点

参数说明:

参数类型描述
querydocument(可选)使用查询运算符指定选择筛选器。若要返回集合中的所有文档。请省略或传递空文档({})
projectiondocument(可选)指定要在与查询筛选器匹配的文档中返回的字段(投影)。例: { comment: 1, _id: 0 }) // 1代表包含,0代表排除

注意:

  • 当使用MongoChef Core 链接mongodb的时候 ,系统默认一次只能查看20条数据
  • 需要查看更多的数据时候,系统提示 type it for more
  • 可以设置系统参数 DBQuery.shellBatchSize = 300

对比Mysql语法

image-20220912170831050.png

文档的更新

  1. 覆盖的修改
例:修改_id为1的记录,点赞量为1001
db.comment.update({ _id: "1" }, { likenum: NumberInt(1001) })

注意:

  • 执行后,文档除了likenum字段,其他字段都没了
  1. 局部修改
例:修改_id为2的记录, 浏览量为889
db.comment.update({  _id: "2" }, { $set: { likenum: NumberInt(889) } })

注意:

  • 默认只修改第一条数据
  1. 批量修改
例:修改所有符合条件的数据
db.comment.update({ userid: "001" }, { $set: { nickname: "张三" }}, { multi: true } )

注意:

  • 如果不加后面的参数,则只更新符合条件的第一条记录
  1. 列值增长的修改
例:对3号数据的点赞数,每次递增1
db.comment.update({ _id: "3" }, { $inc: { likenum: NumberInt(1) } })

文档的删除

  1. 删除所有数据
db.comment.remove({})
  1. 删除指定数据
db.comment.remove(
    <query>, 
    {
        justOne: <boolean>,
        writeConcern: <document>
    }
)
例:删除系统提供的_id=ObjectId("631e99ca7b27c9c7b63cbddf")的记录
db.comment.remove({ _id: ObjectId("631e99ca7b27c9c7b63cbddf") })

参数说明:

参数类型描述
query(可选)删除的文档的条件
justOneboolern(可选)如果设为true或1,则只删除一个文档,如果没有参数,或者false,则删除所有匹配条件的文档
writeConcerndocument(可选)抛出异常级别(一般使用系统默认级别即可)