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'}})
类型数字
Double1
String2
Object3
Array4
Binary data5
Undefined6
Object id7
Boolean8
Date9
Null10
Regular Expression11
JavaScript13
Symbol14
JavaScript (with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255
Max key127

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}}//正序排列
])//统计每个等级下的人数

后期更新。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值