1.find操作
单一条件:
> db.xxx.find({"key":"value"});
嵌套数组:
> db.xxx.find({"array.key":"value"});
多条件:($and)
> db.xxx.find({
$and:[
{"key1":"value1"},
{"key2":"value2"}
]
});
多条件:($or)
> db.xxx.find({
$or:[
{"key1":"value1"},
{"key2":"value2"}
]
});
$lt:小于
> db.xxx.find({key:{$It:value}});
$lte:小于或等于
> db.xxx.find({key:{$Ite:value}});
$gt:大于
> db.xxx.find({key:{$gt:value}});
$gte:大于或等于
> db.xxx.find({key:{$gte:value}});
$ne:不等于
> db.xxx.find({key:{$ne:value}});
$in:过滤查询指定字段包含指定条件内的文档
> db.xxx.find({key:{$in:[value1,value2,value3....]}});
$nin:过滤查询指定字段不包含指定条件内的文档
> db.xxx.find({key:{$ne:array}});
$all:过滤查询指定字段都包含指定条件内的文档
$
i
n
:
只
需
满
足
内
的
某
一
个
值
即
可
,
而
in:只需满足内的某一个值即可, 而
in:只需满足内的某一个值即可,而all 必须满足[ ]内的所有值
> db.xxx.find({key:{$all:[value1,value2,value3....]}});
$not:查询过滤不满足条件的文档
> db.xxx.find({key:{$not:query}})
$nor:查询过滤都不满足条件的文档
> db.xxx.find($nor:[{query1,query2,...])
$exists: 查询字段key存在或不存在的文档
> db.xxx.find({key:{$exists:boolean}})
.limit():只取满足条件的前num条文档
> db.xxx.find().limit(num)
.skip():只取满足条件的且跳过前num条的文档
> db.xxx.find().skip(num)
.sort():满足条件的的文档且根据key字段正向(反向)排序
> db.xxx.find().sort({key:1(-1)})
$type:查询过滤字段key为类型type的文档
> db.xxx.find({key:{$type:type}})
$size:查询特定长度的数组的文档
> db.xxx.find({favorite_number: {$size: 3}})
$mod:取模操作符,例查询所有key值%4===3的文档
> db.xxx.find({key,{$mod:[4,3]}})
$regex:正则表达式过滤文,例查询所有key值为r开头且不区分大小写的文档
> db.xxx.find({key:,{$regex:/^r/,$options:’i’}})
$elemMatch:查询数组字段key包含满足所有条件的文档
> db.xxx.find({key,{$elemMatch:{query1,query2,...}}})
$slice:查询满足条件的文档且文档内的array字段限制为num条
> db.collectionName.find(query,{array:{$slice:num}})
2.聚合操作 $aggregate
管道的概念
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
> db.xxx.aggregate([query1,query2,query3......])
$match筛选符合条件的文档
> db.xxx.aggregate([{$match:{key1:value1,key2:value2}])
$unwind:将数组字段key 拆分成多条文档后输出。
> db.xxx.aggregate([{$unwind:"$key1"},{$unwind:"$key2"}])
$projection:查询后输出文档字段是否保留,key值为1显示,为0不显示
> db.xxx.aggregate([{$project:{key1:1,key2:1}}])
g r o u p : 分 组 查 询 ( 1 ) group:分组查询 (1) group:分组查询(1)sum:求和
> db.xxx.aggregate([{$group:{_id:"$key1",count:{$sum:"$key2"}}}])
(2) $min:取最小值
> db.xxx.aggregate([{$group:{_id:"$key1",min:{$min:"$key2"}}}])
(3) $max:取最大值
> db.xxx.aggregate([{$group:{_id:"$key1",min:{$min:"$key2"}}}])
(4) $avg:平均值
> db.xxx.aggregate([{$group:{_id:"$key1",avg:{$avg:"$key2"}}}])
(5) $addToSet:根据key1分组后通过数组add自己想要的字段
> db.xxx.aggregate([{$group:{_id:"$key1",array:{$addToSet:"$key2"}}}])
(6) $first:分组并取key2字段第一个数据
> db.xxx.aggregate([{$group:{_id:"$key1",first:{$first:"$key2"}}}])
(7) $last:分组并取key2字段最后一个数据
> db.xxx.aggregate([{$group:{_id:"$key1",last:{$last:"$key2"}}}])
(8) $push:分组并push key2的数组
> db.xxx.aggregate([{$group:{_id:”$key”,array:{$push:”$key2”}}}])
(9)$set:根据query求值并生成新字段插入文档
> db.xxx.aggregate([{$set:{newKey:query}])
(10)$unset:将字段key从文档中删除
> db.xxx.aggregate([{$unset:key])
(11)$sort:对指定字段进行排序 1为升序,-1为降序
> db.xxx.aggregate([{$sort:{key:1}])
(12)$limit:限制查询文档数
> db.xxx.aggregate({$limit:num})
(13)$count:计算文档数
> db.xxx.aggregate([{$group:{_id:"$key1",count:{$count:"$key2"}}}])
(14).skip():只取满足条件的且跳过前num条的文档
> db.xxx.aggregate({$skip:num})
整合:
db.xxx.aggregate([
{$unwind:"$key1"},
{$unwind:"$key2"},
{"$match":{query1,query2}},
{"$project":{query1,query2}},
{"$group":{query1,query2}},
{"$sort":{key:-1}},
{"$limit":num},
{"$skip":num}
])
注:
array表示数组:[value1,value2,value3…]
query表示键值对:“key”:“value”