zoukankan      html  css  js  c++  java
  • Mongodb 数据库操作

    写在最前面,

    官方英文文档(最完整权威的),可以尝试去看看

      https://mongoosejs.com/docs/api.html

    一个比较易读的中文使用文档

    http://www.yiibai.com/mongodb/

     

     
    写个小Tip:
    字段名加不加引号都阔以。。但是规范的 json 格式应该给 Key 加上引号,不加时会自动补全
    db.collection.find({'name': 'cc'})
    db.collection.find({name: 'cc'})
     
     
     
    开始正文
    创建数据库 db,集合 collection
     

     
    一些还算常用的命令行操作
     
    show dbs
      admin   0.000GB
      local   0.000GB
      mydb    0.001Gb
    use mydb       // 数据库不存在则创建
    db.dropDatabase()  // 删除
     
    use mydb
    show tables / collections     // 当前数据库下所有的集合
    db.createCollection( name, options ) // 创建新集合
    参数 数据类型 说明
    name string 要创建的集合名称
    options Document (可选)指定有关内存大小和索引选项
     
     
     
     
     
     
     
    db.CollectionName.drop()  // 删除集合,也就是一张表table啦。CollectionName 是集合名称
     
    db  
    db.getName()    // 均为当前数据库名
     
     
     
     增(insert、save)删(remove)改(update)查(find),从简单的说起
     


    以数据库的 Collection / table 表 User 为例:
    db.User.find(..)
    db.getCollection('User').find(..)
     
    插 入
     
    db.User.insert({ })
    db.User.save({ })
     
    删 除
     
    db.User.remove( criteria )
      criteria : delete options. { }
     
    修 改
     
    db.User.update( criteria, objNew, upsert, multi )
      criteria    where  { }
      objNew  set { }
      upsert  如果不存在update的字段,是否插入,默认是false
      multi  mongodb默认是查找更新第一条数据,true更新全部满足条件的,但这个时候objNew需要用更新操作符(如$, $set)
     
      修改操作符介绍一下(修饰 objNew):
     
    $ 操作符
      $ 就是指它自己,代表按条件找出的数组里面某项他自己。
    { $set : { field : value } }
      全部数据类型都支持set
    { $inc : { field : value } }
      对一个数字字段field增加value值
    { $unset : { field : 1} }
      删除字段。没看出field : 1里面的1是干什么用的,反正只要有东西就行。
     
    { $push : { field : value } }
      把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去
    { $pushAll : { field : value_array } }
      同$push,只是一次可以追加多个值到一个数组字段内
     
    { $pop : { field : 1 } }
      删除数组内的一个值,操作的字段的数据类型是数组
      删除最后一个值:{ $pop : { field : 1 } }
      删除第一个值:{ $pop : { field : -1 } }
    { $pull : { field : value } }
      从数组field内删除一个等于value值
    { $pullAll : { field : value_array } }
      同$pull,可以一次删除数组内的多个值
     
     
    查 找
     
    一个简单的区分,查询单条数据 findOne(),多条数据 find()
    find({},{})
    findOne({}, {})
     
      参数1   查询条件
      参数2  (可选)显示哪些字段,1 显示, 0,不显示。
    _id 是默认显示,如果不显示需设置 _id: 0
     
      查询的操作符介绍一下(修饰第一个参数):
     
    $lt   <
    $lte   <=
    $gt   >
    $gte   >=
    $ne   !=
      db.B.find({"x":{"$gt":10,"$lte":30}})
     
    $in 包含
    $nin 不包含
      db.B.find({"x":{"$in":['值1','值2',.....]}})
      $in/$nin优点:可指定不同类型条件和值。
    $or 查询匹配多个条件多个值的文档
      db.B.find({"$or":[{"x":{"$in":['值1','值2'...]}},{"y":"3"}]})
     
    $exists 判断文档属性是否存在
      db.B.find({"name":{"$exists":true}}) 查找 name 属性存在的记录
     
    属性值为 null 的情况
      db.C.find({"c":null})   // 返回 c 的值为 null 或者 c 不存在
      db.C.find({"c":{"$in":[null],"$exists":true}})  // 返回 c 的值为 null 的记录
    正则表达式
      db.B.find({"name":/jack/i})
     
    $not 元条件句
      可与其他条件配合使用,即不在匹配范围之内的
    $mod 取模运算
      db.B.find({"age":{"$mod":[5,1]}}) --表示查找年龄/5余1的所有文档
      若查找年龄/5余1之外的所有文档,可结合$not运算:
      db.B.find({"age":{"$not":{"$mod":[5,1]}}})
     
    $all 匹配所有
      db.B.find({"age":{"$all":[2,3]}})
      如果 age 字段是数组类型,查询出数组中包含 2,3 的所有记录
      如果 age 不是数组也可, { age: {$all:[50]}} []是一个条件
    $size
      db.C.find({"b":{"$size":2}}) b 是个数组字段,查找数组长度为2的记录
    $slice
      返回数组的一个子集,即对以某属性为基础,返回多少条(范围)。也可以接受偏移值和要返回的元素数量,来返回中间的结果。
     
      
      游标
      使用游标返回find的执行结果,客户端对游标的实现通常能对结果进行数量的限制、略过部分结果、排序等有效控制。
      
    var cursor = db.C.find()     --定义游标
    while ( cursor.hasNext() ) {
      var obj = cursor.next();
      print(obj.a);
      ......
    }
     
    db.C.find().limit(10)   限制查询的结果条数为10条
    db.C.find().skip(10)   忽略匹配的前10条,显示从第11条匹配的文档开始所有的文档
    db.C.find().sort({"a":-1}) sort以键/值,表示按某个属性进行排序,1:升序,-1:降序
     
     
      $where
        即可执行任务JavaScript作为查询的一部分。
     
    $where的值可以是function、也可以是字符串等等。
      db.C.find({"$where":function(){return this.a == "1"}})
      db.C.find({"$where":"this.a == '1'"}})
     
    注意:采用$where子句查询在速度上较常规查询慢的多。因文档需要从BSON转换成javascript对象,然后通过"$where"的表达式来运行。
    解决:可用常规查询做前置过滤,配置"$where"查询进行调优,可达到不牺牲性能的要求。
     
    如果说查询条件的话,还有一种写法: where({ })..
     
    再写一个小 Tips 吧,比较显而易见的事情
    操作符都是写在 { } 中,json 的形式存在.. 多种操作符可以嵌套配合使用..

    自己用到的操作很少,别人家的 blog 总结的很全面,很多东西也是借鉴+整理~~

    查询 find 参考:

    更新 update 参考:

     
    一些高级操作在这里,教你用 JS 风格语法  for,while,next,hasNext,forEach,toArray,findOne,limit..操作数据库

     

     
     
  • 相关阅读:
    【HDU1233】还是畅通工程(MST基础题)
    【HDU2122】Ice_cream’s world III(MST基础题)
    【HDU2120】Ice_cream's world I(并查集基础题)
    【HDU1232】畅通工程(并查集基础题)
    【HDU1102】Constructing Roads(MST基础题)
    【HDU1856】More is better(并查集基础题)
    【HDU1325】Is It A Tree?(并查集基础题)
    ural 1907 Coffee and Buns
    插头DP学习
    hdu 5072 Coprime
  • 原文地址:https://www.cnblogs.com/yier0705/p/7099683.html
Copyright © 2011-2022 走看看