• mongodb update


    methods

        db.collection.findOneAndReplace().
        db.collection.findOneAndUpdate().
        db.collection.findAndModify().
        db.collection.save().
        db.collection.bulkWrite().
    

    语句结构

    db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )
    
    • query : 查询条件,类似sql update查询内where后面的。
    • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    • upsert : 可选,如果不存在update的记录,是否插入objNew,true为插入,默认是false。
    • multi : 可选, 默认是false,只更新找到的第一条记录。为true,就把按条件查出来多条记录全部更新。
    • writeConcern :可选,抛出异常的级别

    Replace the Document

    To replace the entire content of a document except for the _id field, pass an entirely new document as the second argument to db.collection.replaceOne() or db.collection.update(). When replacing a document, the replacement document must consist of only <field> : <value>.

    if you do include the _id field, it must have the same value as the current value

    db.collection.replaceOne

    replace the first document that matches the filter name equals "abc" with the new document:

    db.users.replaceOne(
       { name: "abc" },
       { name: "amy", age: 34, type: 2, status: "P", favorites: { "artist": "Dali", food: "donuts" } }
    )
    

    Operators

    field

    $inc

    用法:{ $inc : { field : value } }
    意思对一个数字字段field增加value

    $mul 乘

    $rename 重命名

    $set 赋值

    $unset 移除field

    $setOnInsert

    找不到满足条件的文档且insert选项设置为true时才起作用,否则被忽略

    db.products.update(
      { _id: 1 },
      {
         $set: { item: "apple" },
         $setOnInsert: { defaultQty: 100 }
      },
      { upsert: true }
    )
    

    $min

    Only updates the field if the specified value is less than the existing field value.

    $max

    Array

    $占位符

    更新找到的那个元素的值

    db.students.update(
       { _id: 1, grades: 80 },
       { $set: { "grades.$" : 82 } }
    )
    
    db.students.update(
       { _id: 4, "grades.grade": 85 },
       { $set: { "grades.$.std" : 6 } }
    )
    

    $addToSet

    Adds elements to an array only if they do not already exist in the set.

    { _id: 1, letters: ["a", "b"] }
    

    The following operation appends the array [ "c", "d" ] to the letters field:

    db.test.update(
       { _id: 1 },
       { $addToSet: {letters: [ "c", "d" ] } }
    )
    

    The letters array now includes the [ "c", "d" ] array as an element:

    { _id: 1, letters: [ "a", "b", [ "c", "d" ] ] }
    

    使用each
    一次插入多个值

    db.inventory.update(
       { _id: 2 },
       { $addToSet: { tags: { $each: [ "camera", "electronics", "accessories" ] } } }
     )
    //变成
    {
      _id: 2,
      item: "cable",
      tags: [ "electronics", "supplies", "camera", "accessories" ]
    }
    

    $pop

    移除数组第一个或最后一个元素
    -1 to remove the first element of an array and 1 to remove the last element

    { $pop: { <field>: <-1 | 1>, ... } }
    

    $pullAll

    删除在value列表中的所有元素

    { _id: 1, scores: [ 0, 2, 5, 5, 1, 0 ] }
    
    db.survey.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } )
    
    { "_id" : 1, "scores" : [ 2, 1 ] }
    

    $pull

    从现有的数组中移除与指定条件相匹配的所有值

    { $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
    

    $push

    添加一个元素,不过不要忘了$each

    db.students.update(
       { name: "joe" },
       { $push: { scores: { $each: [ 90, 92, 85 ] } } }
    )
    

    Modifiers

    $each

    $slice

    截取数组,正的就从前边开始

    { "_id" : 1, "scores" : [ 40, 50, 60 ] }
    
    db.students.update(
       { _id: 1 },
       {
         $push: {
           scores: {
             $each: [ 80, 78, 86 ],
             $slice: -5
           }
         }
       }
    )
    
    { "_id" : 1, "scores" : [  50,  60,  80,  78,  86 ] }
    
    //只截取、不增加
    db.students.update(
      { _id: 3 },
      {
        $push: {
          scores: {
             $each: [ ],
             $slice: -3
          }
        }
      }
    )
    

    $sort

    重新排列数组顺序, 1 for ascending or -1 for descending

    db.students.update(
       { _id: 1 },
       {
         $push: {
           quizzes: {
             $each: [ { id: 3, score: 8 }, { id: 4, score: 7 }, { id: 5, score: 6 } ],
             $sort: { score: 1 }
           }
         }
       }
    )
    

    Important

    The sort document refers directly to the field in the documents and does not reference the containing array field quizzes; i.e. { score: 1 } and not { "quizzes.score": 1}

    $position

    决定在数组的哪个位置插入数据
    比如带有$each的例子

    {
      $push: {
        <field>: {
           $each: [ <value1>, <value2>, ... ],
           $position: <num> 
        }
      }
    
  • 相关阅读:
    2022年阿里内部Java岗面试offer直通车,年薪50W不是梦
    2022年腾讯首发Java岗分布式面试真题,助力金三银四我是认真的
    open()函数在if条件中时的问题
    关闭stdout后打开stdout
    container_of
    tmpnam函数和tmpfile函数
    dup和dup2函数
    vim命令
    FILE结构体的定义
    jQuery 完整 ajax示例
  • 原文地址:https://www.cnblogs.com/jcuan/p/5699110.html
Copyright © 2020-2023  润新知