1.配置
linux配置参见
http://blog.csdn.net/doiido/article/details/43675303
2.java编程
(1)简单的记录查询,find
find通过简单的查询条件进行匹配,根据筛选的字段进行返回
db.users.find({“name”:”apple”}, {“name”:true,” _id”:false})
标识匹配name字段为apple的记录,并返回这些记录中的name字段。
查询操作符包括:$lte(小于等于),$gte(大于等于),$gt(大于),$ne(不等),$in,“age”:{$exists:false}是否存在。
查询的时候注意null和空字符串是不一样的
(2)分组查询group
DBObject group(DBObject key, DBObject cond, DBObject initial, String reduce, String finalize)key指定需要分组的字段,需要聚合使用1,支持多字段分组。同时也支持function,返回处理后的字段进行分组:
cond可可以使用查询条件过滤筛选数据。
java中query书写
initial需要对使用的变量进行初始化,格式为json格式
mongovue中:
reduce函数中对每个分组的记录进行处理。这里只是进行了简单的字段求和。
java中:
在finalize中可以对返回的out对象进行进一步处理。
reduce和finalize支持的都是js操作。
(3)聚合查询
{ $match: { "borough": "Queens", "cuisine": "Brazilian" } },
{ $group: { "_id": "$address.zipcode" , "count": { $sum: 1 } } }
聚合查询使用关键字
$sort,$project,$group,$match,$limit,$skip
$project::可以对结果集中的键 重命令,控制键是否显示,对列进行计算。
$match: 过滤结果集
$group:分组,聚合,求和,平均数,等
$skip: 在显示结果的时候跳过前几行
$sort:对即将显示的结果集排序
$limit:控制结果集的大小
并且可以重复使用。match里面支持$and,$or,$eq,$cond,以及一些常见的查询关键字
$sort需要制定排序字段,必须是上个管道出来的数据中存在的字段,
1,为升序,-1为降序。
$project中主要对字段进行处理。需要展示某个字段为1,不需要则不设置。_id需要制定为0才不显示。可以对一些简单字段进行处理。
$project:{did:"$id",dname:"$iname",dage:"$iage",daddr:"$iadd",_id:0}实现对一些字段重命名
$group中对上个管道的结果数据进行聚合处理。
_id中指定按照哪个或哪些字段进行聚合。其他返回的字段可以进行一些基本运算,使用$sum求和。$符号标识文档中的某个字段。
$sum,$avg,$divide,$addToSet,可以将数据加到一个set集合中,一次来计算去重数据。使用$sum:1来计数。
$skip跳过指定条数记录。
db.test.aggregate({$sort:{id:1}},{$skip:6});
聚合管道操作没有固定的顺序,可以先过滤$match再分组$group,或者先分组再过滤,再进行分组。
常见的表达式关键字:
project:部分
#数学表达式
$add:一个或多个表达式相加{$project:{iage:{$add:["$iage",1]},_id:0}}
$subtract:接收两个表达式,返回两表达式的之差{$project:{iage:{$add:["$iage",1]},subtr:{$subtract:["$iage",20]}
$multiply:接收一个或多个表达式,返回它们相乘的结果集{$project:{multi:{$multiply:["$iage",2]},_id:0}}
$divide:接收两个表达式,返回第一个除以第二个表达式的商{$project:{divide:{$divide:["$iage",11]},_id:0}}
$mod:接收两个表达式,返回第一个表达式除以第二个表达式的余数(模型){$project:{iage:1,mod:{$mod:["$iage",20]},_id:0}}
#日期表达式
$year:年份{$project:{_id:0,iname:1,year:{$year:[new Date()]}}}
$month:月份
$week:一年中的第几周
$dayOfMonth:本月的第几天
$dayOfWeek:一个星期的第几天
$dayOfYear:一年中的第几天
$hour:获取小时部分
$minute:取得分钟数
$second:取得秒数
#字符串表达式
$substr:字符串截取函数,相当于mysql中substr{$project:{_id:0,id:1,iname:1,substr:{$substr:["$iname",0,4]}}}
$concat:字符串连接函数{$project:{_id:0,id:1,iname:1,iadd:1,concat:{$concat:["$iname"," ","$iadd"]}}}
$toLower:将字符串值变为小写{$project:{_id:0,iname:1,toLower:{$toLower:["$iname"]}}}
$toUpper:将字符串值变为大写
#逻辑表达式
$cpm:接收两个表达式[exp1,exp2],如果exp1
{$project:{_id:0,iname:1,iadd:1,cmp:{$cmp:["$iname","$iadd"]}}}
$cond:[bool,exp1,exp2],如果bool为true就返回exp1,否则返回exp2
{$project:{_id:0,iname:1, con:{$cond:[false,"$iage","$iadd"]}}}
$ifnull:[exp1,exp2],如果exp1为null,就返回exp2
$strcasecmp:比较两个字符串的大小
{$project:{_id:0,iname:1,iadd:1,strcasecmp:{$strcasecmp:["w","w"]}}}
$eq/$ne/$gt/$gte/$lt/$lte:以此为(等于/不等于/大于/大于或等于/小于/小于或等于)
$and:并且
$or:或
$not:否
$in:相当于mysql中 in
$ne:不等于。{$match:{$and:[{iname:{$ne:"ToneyDeng"}}
$exists:列是存在。
{$match: {$or:[{id:{$not:{$in:[1,3,5,6,7,8]}}} ,{$and:[{iname:{$ne:"ToneyDeng"}},{iage:{$lt:25}}]}]}}$addTOSet:expx ,如果当前数组中不包含expx就把它添加到数组中。
$push:expx,不管expx是什么值,都expx 都添加到数组中。