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时间段做查询,然后以 天进行分 ...
随机推荐
- docker私库harbor的搭建
1.文件下载 # wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.1.tgz 安装官网 ...
- Round544div3E(1133E)
一.题目链接 https://codeforces.com/problemset/problem/1133/E 二.思路 显然要使用dp,因为中间有部分人不会选取. 令$dp[i][j]$表示在前$i ...
- CS RANK: AI & ML
http://csrankings.org/#/index?ai&mlmining 权威学术排名:30-100
- 转载-----BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
目前,大型设计一般推荐使用同步时序电路.同步时序电路基于时钟触发沿设计,对时钟的周期.占空比.延时和抖动提出了更高的要求.为了满足同步时序设计的要求,一般在FPGA设计中采用全局时钟资源驱动设计的主时 ...
- php创建临时表
$sql= "create temporary table yc_linshi ( img varchar(100) not null, openid varchar(50) not nul ...
- 「2017 山东一轮集训 Day5」字符串 (后缀自动机, 拓扑排序)
/** 首先通过SAM求出每个串本质不同的子串 然后发现转移不好处理整体的本质不同 形如串A可能状态有a,b,ab,空,串B可能状态有b,空两种, 那么我们需要处理ab + 空 和 a + b的情况 ...
- oracle查看和替换含不可见字符(空白)
select lengthb('1397256'), dump('1397256') from dual; select ascii('') from dual; ), '') from dua ...
- if 判断语句
if 条件:if语句块当条件成立的时候会执行if语句块, 如果条件不成立. 不执行语句块的内容 例: money = int(input("请输入你兜里的钱:")) # 300 i ...
- django交互vue遇到的问题
接受列表(数组): request.POST.get('array', '') # 结果得到数组的最后一个元素 request.POST.getlist('array', '') # 获取整个列表
- MySql 索引 查询 优化
官方文档: https://dev.mysql.com/doc/refman/5.7/en/explain-output.html#explain_rows type: 连接类型 system 表只有 ...