• MongoDB 增删改查 学习笔记


    简单命令

      mongo --nodb 不指定链接数据库
      conn = new Mongo(" some-host: 30000")
      db = conn.getDB(" myDB") 链接数据库
      db.help() 查看帮助
      db.foo.update 查看update使用方法
      function (query, obj, upsert, multi) {
        assert( query, "need a query");
        assert( obj, "need an object");
        this._validateObject( obj);
        this._mongo.update( this._fullName, query, obj,upsert ? true : false, multi ? true : false);
      }

      shell 辅 助 函 数 对 应 的 JavaScript 函 数
      辅 助 函 数      等 价 函 数
      use foo       db.getSisterDB(" foo")
      show dbs      db.getMongo(). getDBs()
      show collections      db.getCollectionNames()


    插入
      db.foo.insert({" bar" : "baz"})
    批量插入
      db.foo.batchInsert([{"_id" : 0}, {"_id" : 1}, {"_id" : 2}])
    删除数据
      db.foo.remove({'opt-out':true})
    删除整个集合
      db.tester.drop()

    更新
      joe = { "_id" : ObjectId(" 4b2b9f67a1f631733d917a7a"), "name" : "joe", "friends" : 32, "enemies" : 2 } 元数据
      db.users.update({" name" : "joe"}, joe);

      修改器
        $set 用来指定一个字段的值。如果这个字段不存在,则创建它。这对更新模式或者增加用户定义的键来说非常方便。
        db.users.update(
          {"_id" : ObjectId(" 4b253b067525f35f94b60a31")},
          {" $set" : {" favorite book" : "War and Peace"}}
        )
      修改内嵌文档
        db.blog.posts.update({" author.name" : "joe"},{" $set" : {" author.name" : "joe schmoe"}})

      $unset
        删除某个键值
        db.user.update({'name':'joe'},{'$unset':{'addr':1}})

      $inc 存在累加,不存在创建
        db.user.update({'name':'joe'},{'$inc':{'age':1}})
      $push 存在追加,不存在创建
        db.user.update({'name':'joe'},{'$push':{'interests':'football'}})

        db.user.update(
          {"name" : "joe"}, # where条件
          {"$push" : #追加修改器
          {"subject" : #追加对象
          {"$each" : [ #遍历修改器
            #追加信息
            {"name" : "语文", "rating" : 6.6},
            {"name" : "数学", "rating" : 4.3} ,
            {"name" : "英语", "rating" : 8.0} ,
            {"name" : "物理", "rating" : 7.6},
            {"name" : "化学", "rating" : 9.3} ,
            {"name" : "体育", "rating" : 5.0} ,
          ],
          "$slice" : -5, #最终保留10个追加信息
          "$sort" : {" rating" : -1} #按rating排序
          }
        }
        }
        )
      $ne 如果没有就
        #如果interests的值没有basketball就push,保证interests值唯一
        db.user.update({'interests':{'$ne':'basketball'}},{"$push":{'interests':'basketball'}})

      $addToSet 真正用于避免重复插入的方法
        db.user.update({'name':'joe'},{'$addToSet':{'interests':'basketball'}})

      $pop 从数组中删除一个元素
        从interests中删除一个元素1是从尾部删,-1从首部删
        db.user.update({'name':'joe'},{'$pop':{'interests':1}})
      $pull 从数组中删除指定元素
        db.user.update({'name':'joe'},{'$pull':{'interests':'basketball'}})

      upsert 如果没有找到符合更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了匹配的文档,则正常更新。
        db.user.update({'name':'sum'},{'$inc':{'age':1}},true)

      $setOnInsert 只有新建的时候才...
        db.user.update({'name':'bill'},{'$setOnInsert':{'createdAt':new Date()}},true)
      save
        是一个shell函数,如果文档不存在,它会自动创建文档;如果文档存在,它就更新这个文档。它只有一个参数:文档。
        要是这个文档含有"_id"键,save会调用upsert。否则,会调用insert。如果在Shell中使用这个函数,就可以非常方便地对文档进行快速修改。
        user = db.user.findOne({'name':'jef'})
        user.age = 20
        db.user.save(user)

      更新多个文档
        默认情况下,更新只能对符合匹配条件的第一个文档执行操作。要是有多个文档符合条件,只有第一个文档会被更新,其他文档不会发生变化。
        要更新所有匹配的文档,可以将update的第4个参数设置为true
        db.user.update({},{'$set':{'age':20}},false,true)

      findAndModify
        能够在一个操作中返回匹配结果并且进行更新。
          query 查询文档,用于检索文档的条件。
          sort 排序结果的条件。
          update 修改器文档,用于对匹配的文档进行更新(update和remove必须指定一个)。
          remove 布尔类型,表示是否删除文档(remove和update必须指定一个)。
          new 布尔类型,表示返回更新前的文档还是更新后的文档。默认是更新前的文档。
          fields 文档中需要返回的字段(可选)。
          upsert 布尔类型,值为true时表示这是一个upsert。默认为false。
         "update"和"remove"必须有一个,也只能有一个。要是没有匹配的文档,这个命令会返回一个错误。
        db.user.findAndModify({'query':{'name':'joe'},sort:{'age':1},'update':{'$set':{'sex':'man'}}})

    查询

      简单查询
      查找age=20的所有信息 按age正序,跳过10条数据区1条
        db.user.find({'age':20}).sort({'age':1}).limit(1).skip(10);
      多个条件
        db.user.find({'name':'joe','age':20})
      选择返回字段("_id"这个键总是被返回,即便是没有指定要返回这个键。)
        db.user.find({'name':'joe','age':20},{'name':1,'age':1,'sex':1})
      选择不返回那个字段
        db.user.find({'name':'joe','age':20},{'name':0,'age':0,'sex':0})

      范围查询
        $lt 小于,$lte 小于等于,$gt 大于,$gte 大于等于,$ne 不等于
          db.user.find({'age':{'$gt':18,'$lt':100}})
        $nin,$in查询
          db.user.find({'name':{'$in':['joe','sum']}})
        $or
          db.user.find({'$or':[{'name':'joe'},{'sex':'w'}]})
        $mod 去模运算符
          取年龄对5取模,等于1的数据
          db.user.find({'age':{"$mod":[5,1]}})
        $not
          排除年龄对5取模,等于1的数据
          db.user.find({'age':{'$not':{"$mod":[5,1]}}})

        特定类型查询
          当数据sex等于null或者没有sex属性的时候都会被查出来
            db.user.find({'sex':null})
          只查sex等于null,不查没有sex属性的数据
            db.user.find({'sex':{'$in':[null],'$exists':true}})
        正则匹配
          db.user.find({'name':/joe?/i})

        数组查询
          interests数组中有Football的都会被查出
            db.user.find({'interests':'Football'})
          interests数组中完成相等(数组中元素值和顺序必须一致)的才会被查出
            db.user.find({'interests':['Coding','Cooking']})
          $all 只要有其中的元素就会查出,不是完成相等,跟元素顺序无关
            db.user.find({'interests':{'$all':['Football','Basketball']}})
          根据元素位置查找
            db.user.find({'interests.0':'Football'})
          $size 根据元素的个数查找
            db.user.find({'interests':{'$size':3}})
          $slice 指定返回子集合中的n条(n>0表示前n条,0<0表示后n条)
            db.user.find({'name':'joe'},{'interests':{'$slice':2}})
            从第一条开始取两条
            db.user.find({'name':'joe'},{'interests':{'$slice':[1,2]}})

        内嵌文档查找
          完成匹配
            db.user.find({'addr':{ "City" : "beijing", "District" : "chaoyang", "Street" : "tianshuiyuan" }})
          内嵌某个属性查找(可以查找到City等于beijing的所有文档)
            db.user.find({'addr.City':"beijing"})
          对subject下的所有数据进行匹配,只要有一个大于等于9分的都会被查出(查询体育大于9分的文档)
            db.subject.find({'subject':{'$elemMatch':{'name':'体育','rating':{'$gte':9}}}})

        $where
          在查询中执行任意的JavaScript代码
            db.subject.find('$where':function(){
              if(xxxxx){

                return true

                }else{

                return false

              }

            })

        高级查询选项
          $maxscan:integer
            指定本次查询中扫描文档数量的上限。
          $min:document
            查询的开始条件。在这样的查询中,文档必须与索引的键完全匹配。查询中会强制使用给定的索引。在内部使用时,通常应该使用"$gt"代替"$min"。可以使用"$min"强制指定一次索引扫描的下边界,这在复杂查询中非常有用。
          $max:document
            查询的结束条件。在这样的查询中,文档必须与索引的键完全匹配。查询中会强制使用给定的索引。在内部使用时,通常应该使用"$lg"而不是"$max"。可以使用"$max"强制指定一次索引扫描的上边界,这在复杂查询中非常有用。
          $showDiskLoc:true
            在查询结果中添加一个"$diskLoc"字段,用于显示该条结果在磁盘上的位置。

  • 相关阅读:
    10个最佳jQuery Lightbox效果插件收集
    JavaScript 中的内存泄露模式
    推荐6 款免费的图标编辑器
    Google 排名中的 10 个最著名的 JavaScript 库
    影响搜索引擎排名的因素2009年(总览)
    2009 年度最佳 jQuery 插件
    使用 Nginx 提升网站访问速度
    10个新的最有前途的JavaScript框架
    IE8面向Web开发人员的功能改进
    IE6, IE7, IE8 CSS 兼容速查表
  • 原文地址:https://www.cnblogs.com/qy-brother/p/6993117.html
Copyright © 2020-2023  润新知