zoukankan      html  css  js  c++  java
  • Mongodb中更新的学习小结

    今天继续很久没学习的mongodb的简单学习,今天来看的是更新。先来看简单的用法: 

    use updatetest 
    >switched to db updatetest 

    首先插入一下: 
    db.things.insert( { name : "test1"} ) 

    db.things.find({name : "test1"}) 
    会找到: 
      { "_id" : ObjectId("50f1778ea5ec290b7773303b"), "name" : "test1" } 

      更新的格式为: 
      db.collection.update( criteria, objNew, upsert, multi ) 
    参数: 
    criteria - 查询需要更新的项; 
    objNew - 更新的对象或者 $ operators (例如 $inc) 这样的操作因子 
    upsert - 是否是 "upsert"; 也就是说如果记录不存在是否插入新的记录 
    multi - 是否所有满足criteria的在整个文档都更新 
    注意:在缺省情况下,update()只会更新第一个满足条件的项。如果需要修改所以的满足条件的 
    项的话,需要使用multi这个标志位。 

      db.things.update({name: "test1"}, {name: "test2"}) 
    再find一下 
      db.things.find({name : "test2"}) 
    会发现有test2了; 
       再来: 
    db.things.update({name : "hello"}, {name: "hello,abc"}, true); 
      注意参数true这里的用法,结果为,因为hello没有,所以只会插入 
    hello,abc了。 
      也可以写成: 
      db.things.update({name : "hello"}, {name: "hello,abc"}, { upsert: true }); 
    注意: 
    1、update方法只更新一条记录 
    默认情况下update只更新符合查询条件的第一条找到的记录。如果想更新所有符合条件的记录,需要手动添加 multi 这个参数。 

    2、update方法的更新参数 
    像下面这个语句 
    updatetest.update( { _id: X }, {name: "Joe", age: 20 }); 
    会把符合条件的原纪录按照{name: "Joe", age: 20 }完整替换,而不是简单的将name设为"Joe",age设为20. 
    如果只想更改这2个值,而不是替换完整对象,应该写 
    updatetest.update( { _id: X },{$set: {name: "Joe", age: 20 }}); 
       
       $inc的用法,比如统计经常要用到了,如: 
      db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
       
    db.things.find({BlogPost : "How To Do Upserts"}) 
    >{ "_id" : ObjectId("50f17b4541c33bd2459aafed"), "BlogPost" : "How To Do Upserts", "Hits" : 1 } 
    再多运行两次: 

      db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
    db.things.update({BlogPost: "How To Do Upserts"}, {$inc: {Hits: 1}}, { upsert: true }); 
    >db.things.find({BlogPost : "How To Do Upserts"}) 

    >{ "_id" : ObjectId("50f17b4541c33bd2459aafed"), "BlogPost" : "How To Do Upserts", "Hits" : 3 } 

    可以看到,hits变为3了。 
        
    multi的用法: 
       比如: 
    db.Indexing.insert( { name : "Denis", age : 10 } ) 
    db.Indexing.insert( { name : "Denis", age : 20 } ) 
    db.Indexing.insert( { name : "Denis", age : 30 } ) 

    要将所有的denies的age都更新,必须加行multi: 
    db.Indexing.update({name: "Denis"}, {$set: {age: 42}},{ multi: true })

  • 相关阅读:
    Flutter Icons 内置图标库,全套Material图标
    解决cannot connect to daemon at tcp:5037: cannot connect to 127.0.0.1:5037: 由于目标计算机积极拒绝,无法连接。 (10061).
    mavenCentral()、jcenter()、google()仓库
    flutter doctor检查出现多个Android Studio解决办法
    Oracle trunc 函数用法详解
    将博客搬至CSDN
    Yii2 高级模板不使用Apache配置目录,将前后台入口移到根目录
    报警告session_regenerate_id(): Failed to create(read) session ID: files (path: N;/path)
    yii2GridView的简单使用
    yii 表单如何写,action指向哪里?
  • 原文地址:https://www.cnblogs.com/ctp0925/p/3429745.html
Copyright © 2011-2022 走看看