NOSQL非关系数据库

MongoDB

find() 和 pretty() 查询

db.'表名'.find({query1,query2}, {projection1,projection2})
query		//查询条件
projection	//返回键值对
#find() //方法以非结构化的方式来显示全部文档

db.'表名'.pretty()
#pretty() //方法以格式化的方式来显示全部文档

//通配符 /^/  /$/  / / = myc中的%
db.'表名'.find({title:/^test/})	//以test开头
db.'表名'.find({title:/test$/})	//以test结尾
db.'表名'.find({title:/test/})	//包含test

update() 更新

db.'表名'.update(
   {'条件列名':'条件值'},
   {$set:{'改参数的列名':'更改后的参数'}},
   {
     upsert: true/false, //true:容许插入新的数据,false:只更新已存在的数据
     multi: true/false, //true:容许更新多条记录,false:只更新第一条
     writeConcern: 在指定异常时抛出错误
   }
)
WriteConcern类型 抛出异常状况
WriteConcern.NONE 没有异常抛出
WriteConcern.NORMAL 仅抛出网络错误异常,没有服务器错误异常
WriteConcern.SAFE 抛出网络错误异常、服务器错误异常;并等待服务器完成写操做。
WriteConcern.MAJORITY 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操做。
WriteConcern.FSYNC_SAFE 抛出网络错误异常、服务器错误异常;写操做等待服务器将数据刷新到磁盘。
WriteConcern.JOURNAL_SAFE 抛出网络错误异常、服务器错误异常;写操做等待服务器提交到磁盘的日志文件。
WriteConcern.REPLICAS_SAFE 抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操做。

条件操做符

操做符 格式 示例 RDBMS语句
等于= {key:value} db.col.find({“key”:“value”}).pretty() where key = ‘test’
小于< {key:{ $lt :num}} db.col.find({“key”:{$lt:num}}).pretty() where key < num
小于等于<= {key:{ $lte :num}} db.col.find({“key”:{$lte:num}}).pretty() where key <= num
大于> {key:{ $gt :num}} db.col.find({“key”:{$gt:num}}).pretty() where key > num
大于等于>= {key:{ $gte :num}} db.col.find({“key”:{$gte:num}}).pretty() where key >= num
不等于!= {key:{ $ne :num}} db.col.find({“key”:{$ne:num}}).pretty() where key != num
$gt		//	greater than	>
 $gte		//	gt equal		>=
 $lt		//	less than		<
 $lte		//	lt equal		<=
 $ne		//	not equal		!=
 $eq		//	equal			=
 db.col.find( { key : { $lt :50, $gt : 0} } )

AND 和 OR 条件

db.col.find({key1:value1, key2:value2}).pretty() --- and

db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty() --- or

db.col.find({"key": {$gt:50}, $or: [{"key": "value"},{"title": "value"}]}).pretty() --- and + or

$type 操做符

db.col.find({"key" : {$type : 'string'}})
类型 数字
Double 1
String 2
Object 3
Array 4
Binary data 5
Undefined 6
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 13
Symbol 14
JavaScript (with scope) 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255
Max key 127

createIndex() 索引

db.col.createIndex(key1:1,key2:-1)
//按照key1的正序和key2的倒序建立复合索引

db.col.createIndex({key1:1,key2:-1},{background: true})
//建立索引时加 background:true,让建立工做在后台执行

aggregate() 聚合

db.col.aggregate([{$group:{_id:"$name",num:{$sum:1}}}])
=
select name, count(*) from col group by name

$geoNear	//输出接近某一地理位置的有序文档。

$unwind 拆分

db.col.aggregate([{$unwind:"keys"}])
//使用$unwind能够将keys中的每一个数据都被分解成一个文档

$Limit 和 $Skip

db.col.find().limit(num1).skip(num2)
//显示num1条中除去num2条以后的数据

$limit 限制显示

db.col.find().limit(num)
//显示num条数据

$skip 剔除显示

db.col.find().skip(num)
//跳过num条数据,显示num条以后的数据

$sort 排序

db.col.find().sort({"key":-1})
//按照key的倒序排列

$project

db.col.aggregate(
    {$project:
        {
            _id:0,
            userid:1,
            username:1
        }
    }
)
//id主键默认显示(0为不显示),显示userid和username
等于 select userid,username from col

$match

db.col.aggregate([
    {$match:{score:{$gt:10,$lte:20}}},
    {$group:{_id:null,count:{$sum:1}}}
])
//获取分数大于10小于或等于20的数据而后管道至$group处理

$group

db.col.aggregate([
    {$group:{
        _id:"$username",
        times:{$sum:1}
    }}
])
//对username进行排列,统计出每一个username出现的次数
等于  select username,count(*) from col group by username

$lookup

$lookup: { // aa表左链接
    from: "bb", // 关联到bb表
    localField: "uid", // aa 表关联的字段
    foreignField: "uid", // bb 表关联的字段
    as: "classId"
  }

$cond + if,else 实例(统计多条件下每一个条件的人数)

db.lv_exp.aggregate([
{$project:{
    playerid:1, //1为统计playerid个数
    exp:{
        $cond:{
            if:{$and:[{$lt:['$exp',1000]},{$gte:['$exp',0]}]},
            then: "Lv_1 人数为",
            else :{
                $cond:{
                    if:{$and:[{$lt:['$exp',2000]},{$gte:['$exp',1000]}]},
                    then:"Lv_2 人数为",
                    else:{
                        $cond:{
                            if:{'$exp':{$gte:2000}},
                            then:"Lv_3 人数为",
                            else:"经验为负数的异常人数为"//0如下的数据
                        }
                    }
                }
            }
        }
    }
}},
{$match:{playerId:10000}},//统计playerid=10000的人员(统计人员的类型) != userid
{$group:{_id:"$exp",count:{$sum:1}}},//这里是按照exp的字段,把全部数据的个数相加
{$sort:{_id:1}}//正序排列
])//统计每一个等级下的人数

后期更新。。。web