MongoDB
find() 和 pretty() 查询
db. '表名' . find( { query1, query2} , { projection1, projection2} )
query // 查询条件
projection // 返回键值对
db. '表名' . 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 } } // 正序排列
] ) // 统计每个等级下的人数
后期更新。。。