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时间段做查询,然后以 天进行分 ...
随机推荐
- [C#][EF] 添加表添加不进来
确认此表有没有主键,没有主键时就会这样.
- MySQL事务提交过程(转载)
http://blog.csdn.net/sofia1217/article/details/53968214 上一篇文章我们介绍了在关闭binlog的情况下,事务提交的大概流程.之所以关闭binlo ...
- windows下GitHub的安装、配置以及项目的上传过程详细介绍
概要 本文主要介绍了在Win10系统中安装Github终端.如何配置安装好的Git终端以及如何利用Git终端将自己的项目上传到远程服务器中 操作必备 win10系统电脑一台.良好的互联网连接.GitH ...
- [UE4]创建属性绑定
- UE4中使用URL图片
转自:http://www.52vr.com/article-911-1.html
- All entities must be found CRM客户责任人变更报错
问题: 1 修改客户的责任人时,报错. 修改其它字段正常. 2 有的客户可以修改,有的不能修改. 使用 Trace Log 查到的信息: All entities must be found. 原因: ...
- Linux系统及常用软件的安装
注释:看了很多人说在Windows下面跑机器学习就和大人一直用勺子吃饭一样,应该用更...刚写到这里Linux又奔溃了-- 以后就在Linux上跑程序了,告别Windows的时代... 别看下面的安装 ...
- 20165205 2017-2018-2 《Java程序设计》第五周学习总结
20165205 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 学会内部类,匿名类,异常类的写法 牚握try...catch...finally处理异常的方 ...
- iOS oc 检测手机移动网络和wifi是否开启
利用Reachability的的一个方法currentReachabilityStatus 获取枚举类型值判断是否为2即可,不是2就不是WiFi. enum { // DDG Netwo ...
- EA Data Modeling 显示别名设置
1.设置 2.效果