mongodb从配置到编程

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:字符串截取函数,相当于mysqlsubstr{$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就返回-1,如果exp1=exp2,就返回1,如果exp1>exp2就返回1

 {$project:{_id:0,iname:1,iadd:1,cmp:{$cmp:["$iname","$iadd"]}}}

$cond:[bool,exp1,exp2],如果booltrue就返回exp1,否则返回exp2

 {$project:{_id:0,iname:1, con:{$cond:[false,"$iage","$iadd"]}}}

$ifnull:[exp1,exp2],如果exp1null,就返回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 都添加到数组中。


你可能感兴趣的:(java,日常笔记)