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..操作数据库

 

 
 
原文地址:https://www.cnblogs.com/yier0705/p/7099683.html