Mongo 应用查询
官网操作手册,基本就够用
https://docs.mongodb.com/manual/
下面是个分组查询的例子,项目中用到然后查了个例子,自己理解了下,觉得很好很强大。
https://blog.csdn.net/yown/article/details/53946781
Mongo分组查询,分组查询,collection为要查询的集合,keyf为定义的聚合key或者有返回值的函数,query为查询条件,initial为各个字段的初始化方法,reduce为计算迭代的函数,finalz为完成查询后的打扫方法,一般删除集合之类的,利用脚本语言,可以实现多种聚合方式的查询
GroupCommand cmd = new GroupCommand(collection, keyf, query, initial, reduce, finalz);
Command:
db.runCommand({group:
{
ns:"collection1",
cond : { "$and":[{"gmtCreate":{"$gt":new ISODate("2016-10-01T00:00:00.000Z")}}, {"gmtCreate":{"$lt":new ISODate("2018-12-31T23:59:59.999Z")}}]},
$keyf:function(doc){
var myDate = new Date(doc.gmtCreate);
var mm = '0'+(myDate.getMonth()+1);
var dd = '0'+myDate.getDate();
return {day:myDate.getFullYear()+''+mm.substring(mm.length-2)+''+dd.substring(dd.length-2)};
},
initial:{"shareCount" : 0 , "shareUserCount" : 0 , "userIdMap" : {}},
$reduce:function(doc, prev){
if(doc.userId != null){
prev.shareCount ++;
if(prev.userIdMap[doc.userId] == null) {
prev.shareUserCount ++;
prev.userIdMap[doc.userId] = 1;
}
}
},
finalize: function(doc){ delete doc.userIdMap; }
}
});
JAVA方式:
public BasicDBList testGroupMongo(String dbName, String collectionName, BasicDBObject condition,
List<String> fields)
throws MongoDAOException {
DB db = mongoClient.getDB(dbName);
DBCollection collection = db.getCollection(collectionName);
String keyf = "function(doc){" + "var myDate = new Date(doc.gmtCreate);"
+ " var mm = '0'+(myDate.getMonth()+1); " + " var dd = '0'+myDate.getDate();"
+ " return {day:myDate.getFullYear()+'@'+mm.substring(mm.length-2)+'@'+dd.substring(dd.length-2)};"
+ "}";
BasicDBObject query = new BasicDBObject(); // where条件
BasicDBObject query1 = new BasicDBObject(); Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
//距离现在9个月之前
calendar.add(Calendar.MONTH, -9);
Date start = calendar.getTime(); query1.append("$gte", start);
query1.append("$lte", new Date());
query.append("gmtCreate", query1);
String reduce = "function(doc, prev){ " + "if(doc.userId != null){ " + " prev.shareCount++; "
+ " if(isNaN(prev.userIdMap[doc.userId])) { " + " prev.shareUserCount ++;"
+ " prev.userIdMap[doc.userId] = 1;" + " }" + "}" + "}";
String finalz = "function(prev){delete prev.userIdMap}";
BasicDBObject initial = new BasicDBObject();
initial.append("shareCount", 0);
initial.append("shareUserCount", 0);
initial.append("userIdMap", new HashMap<String, Integer>());
GroupCommand cmd = new GroupCommand(collection, keyf, query, initial, reduce, finalz);
BasicDBList group = (BasicDBList) collection.group(cmd);
return group;
}
命令执行例子
{
"retval" : [
{
"day" : "20171023",
"shareCount" : 2,
"shareUserCount" : 1
},
{
"day" : "20181023",
"shareCount" : 1,
"shareUserCount" : 1
},
{
"day" : "20180223",
"shareCount" : 1,
"shareUserCount" : 1
}
],
"count" : NumberLong(4),
"keys" : NumberLong(3),
"ok" : 1
}
aggregate:
db.collection1.find({"orderId":333,"address": { $in: ["shanghai", "beijing"] }}).limit(3).skip(0)
db.getCollection('collection1').aggregate(
[
{ $group :{
_id : "$orderId", address: { $push: "$address" } }
}, { $match : {"orderId": 333} },{ $limit : 1 }
],{ allowDiskUse: true }
)
db.getCollection('collection1').aggregate(
[
{
$group : {
_id : { month: { $month: "$date" }, day: { $dayOfMonth: "$date" }, year: { $year: "$date" } },
totalPrice: { $sum: { $multiply: [ "$price", "$quantity" ] } },
averageQuantity: { $avg: "$quantity" },
count: { $sum: 1 }
}
}
]
)
db.getCollection('collection1').aggregate(
[
{ $group : { _id : "$item", books: { $push: "$price" } } },{ $limit : 3 }, {$match : {"_id": "xyz"}},
{ $project : { _id:1, books : 1 } } //结果中包含某些列
]
)
觉得这个也挺好用的
Mongo 应用查询的更多相关文章
- Mongo简单查询总结
mongo 简单查询db.ansheng.findOne()//返回第一条匹配到的数据db.ansheng.findOne({"aaaaa":4})db.ansheng.find( ...
- 监控Mongo慢查询
监控Mongo慢查询 1. 使用mongostat监控MongoDB全局情况 mongostat是mongdb自带的状态检测工具,在命令行下使用.它会间隔固定时间获取MongoDB的当前运行状态,并输 ...
- Mongo常用查询语法
一.查询 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): se ...
- mongo 慢查询配置
我是分片部署,所以慢查询相关的配置是在启动片服务上. 执行查询命令,是在share的primary 上. 1. mongodb慢查询 配置 慢查询数据主要存储在 local库的system.pro ...
- mongo 数据查询
基本查询 方法find():查询 db.集合名称.find({条件文档}) 方法findOne():查询,只返回第一个 db.集合名称.findOne({条件文档}) 方法pretty():将结果格式 ...
- mongo数据查询操作
本文来源于 :Stephen Liu 1. 基本查询: 构造查询数据. > db.test.findOne() { "_id" : Ob ...
- mongo数据库查询结果不包括_id字段方法
db.GPRS_PRODUCT_HIS_FEE.find({"条件字段" : "412171211145135"},{_id:0}) db.GPRS_PRODU ...
- mongo常用查询
复杂查询: and: or: lte,gte,=: and+lt: , 逗号表示and, $lt小于写在值当中 查询实例: 找到含有指定数据文档 查找条件spcode有1个字符长度的文档 db.sp ...
- mongo 过滤查询条件后分组、排序
描述:最近业主有这么一个需求,根据集合中 时间段进行过滤,过滤的时间时间段为日期类型字符串,需要根据某一日期进行截取后.进行分组,排序 概述题目:根据createTime时间段做查询,然后以 天进行分 ...
随机推荐
- pj1--学生信息管理系统
1.根据班上的情况做一个班级学生信息管理系统.包含功能有每日签到.学分管理.个人信息管理 2.要求:用winform+序列化(本地化)的技术实现,以教师机做服务器,要有文件保存.读取.还要有上传头像功 ...
- 大数据:Parquet文件存储格式【转】
一.Parquet的组成 Parquet仅仅是一种存储格式,它是语言.平台无关的,并且不需要和任何一种数据处理框架绑定,目前能够和Parquet适配的组件包括下面这些,可以看出基本上通常使用的查询引擎 ...
- WebSocket 跨域
http://www.cnblogs.com/joeymary/p/5259464.html
- Hadoop的RPC工作原理
RPC远程过程调用: Hadoop的远程过程调用(Remote Procedure Call,RPC)是Hadoop中核心通信机制,RPC主要通过所有Hadoop的组件元数据交换,如MapReduce ...
- BZOJ2560串珠子
/* 很清新的一道题(相比上一道题) g[S]表示该 S集合中胡乱连的所有方案数, f[S] 表示S集合的答案 那么F[S] 等于G[S]减去不合法的部分方案 不合法的方案就枚举合法的部分就好了 g[ ...
- es6(13)--Promise
//Promise { //原始方法 let ajax=function(callback){ console.log('执行') setTimeout(function(){ callback&am ...
- lunix 集群,负载均衡,location
nginx location语法: location支持的语法优先级: 复制代码location匹配顺序 # www.s14hanju.com/1.location = / { 我是代码1} ...
- Mybatis-Plus3.0入门手册
Mybatis-Plus3.0入门手册 ref: https://blog.csdn.net/moshowgame/article/details/81008485 Mybatis-Plus简介 ...
- 最小化安装CentOS 7后,图形界面的安装(GNOME、KDE等)
安装图形化界面: 1.首先安装X(X Window System),命令为 yum groupinstall "X Window System" 2.检查一下我们已经安装的软件以及 ...
- 【Git使用】SourceTree+Git简单使用(Windows)(转)
导读: 本人过去Git的可视化工具用的是TortoiseGit,虽然Android Studio也能进行版本管理,但是用下来,感觉SoureTree这款工具是最舒服的(免费的),下面就给大家介绍下我的 ...