200327-MongoDb系列教程八:文档 Document 更新姿势

文章目录
  1. 1. update
  2. 2. save
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • 本篇介绍update/save两种方法提供的更新姿势

    1. update

    用于更新已经存在的文档,语法如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    db.collection.update(
    <query>,
    <update>,
    {
    upsert: <boolean>,
    multi: <boolean>,
    writeConcern: <document>
    }
    )
    • query: 查询条件
    • update: 更新语句
    • upsert: (可选)true, 不存在update的记录时插入;默认是false,不插入
    • multi: (可选) true,表示更新所有满足条件的记录;默认false,只更新第一条
    • writeConcern: (可选),抛出异常的级别

    插入两条用于测试的数据

    1
    2
    db.doc_demo.insert({'name': '一灰灰', 'age': 19, 'skill': ['java', 'python', 'sql']})
    db.doc_demo.insert({'name': '一灰灰blog', 'age': 20, 'skill': ['web', 'shell', 'js']})

    下面给出几个更新的实例

    更新age

    1
    2
    3
    4
    # 将name为"一灰灰"的文档age + 1
    db.doc_demo.update({'name':'一灰灰'}, {$inc: {'age': 1}})
    # 修改name
    db.doc_demo.update({'name':'一灰灰'}, {$set: {'name': '一灰灰Blog'}})

    更新所有age为20的文档,新增一个tag成员

    1
    db.doc_demo.update({'age': 20}, {$set: {'tag': 1}}, {multi:true})

    更新一个不存在的文档

    1
    db.doc_demo.update({'name': '一灰灰'}, {$set: {'age': 18, 'sex': 'man'}}, {upsert: true})

    2. save

    save最大的特点是覆盖,用新的文档完全覆盖旧的文档;而update,则是更新指定的field

    语法如下:

    1
    2
    3
    4
    5
    6
    db.collection.save(
    <document>,
    {
    writeConcern: <document>
    }
    )

    举例如下

    1
    db.doc_demo.save({'name': '一灰灰', 'age': 22, 'hobby': ['reading', 'walking']})

    那么问题来了,怎样判定是新增一条记录,还是覆盖已经存在的记录呢?

    • 有唯一键来判定
    • 即:如果save的文档中,某个field有唯一性要求,那么当数据库中存在这个field文档文档时,执行覆盖操作;否则执行插入

    举例如下, 指定ObjectId

    1
    db.doc_demo.save({ "_id" : ObjectId("5e7b5c2e0172dc950171c48a"), "name" : "一灰灰New", "age" : 18, "hobby" : [ "play game" ] })

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×