MongoDB常用查询,排序,group,SpringDataMongoDB update group
MongoDB查询
指定查询并排序
db.getCollection('location').find({"site.id":"川A12345","site.ts":{$gte : ISODate("2018-11-30T16:00:00.000Z"), $lt :ISODate("2018-12-30T16:00:00.000Z")}}).sort({"site.ts":-1})
返回指定字段
db.getCollection('location').find({},{ "site.id" : 1}).pretty()
db.getCollection('vehicle.abilities').find({},{"_id":0, "vid":1, "data_range":1})
0表示的是不返回_id字段,1表示返回对应的字段vid,data_range。
或运算($or)
db.getCollection('people').find({$or : [{_id:ObjectId("5bae04f2ea403100054bfea4")},{_id:ObjectId("5bae028fea403100054bfea2")}]})
查询id在指定数组结果($in)
db.getCollection('people').find({"_id" :{$in :[ObjectId("5c346a16adbe1d0005b1a290"),ObjectId("5c346a16adbe1d0005b1a291"),ObjectId("5c35a0c024aa9a00065425d6")]}})
返回指定字段去重后记录数
db.getCollection('user').distinct("name").length
group查询语句:
db.getCollection('collectionName').aggregate(
[
{ $match : { "labels.site_name" : "川A12345","start":{$gte : ISODate("2018-01-30T16:00:00.000Z"), $lte : ISODate("2018-12-31T16:00:00.000Z")}}},
{ $group : { _id : "$start", number :{ $sum : 1 }}},
{ $sort : { _id : -1 }} ]
)
使用aggregate方法;
$match是查询的方法;
$group 分组字段相关;
$sort 排序。
匹配一个Document中的字段是数组属性其中的值:$elemMatch
比如有如下记录:
{_id: ObjectId("53d760721423030c7e14267d"),
name: 'Tony',
categories: [
{
name: 'coder', }
{
name: 'dotaer', }
{
name: 'cook', }
]
}
现在我想要匹配:name:tony和categories数组中name:dotaer的记录
语句如下:
find({"name":"Tony", "categories":{$elemMatch:{"name":"dotaer"})
匹配记录中有个属性是字符串数组中其中一个字符串,有个属性如下
"tags" : [
"state",
"stat"
]
查询语句如下:
db.getCollection('va').find({tags:"stat"})
强烈建议不要定义一个非对象的属性,如字符串数组,可以定义一个对象数组,对象中只有一个属性,字符串
SpringDataMongoDB
简单查询
MongoTemplate template = factory.getMongoTemplate(DATABASE_NAME);
Query query = query(where("name").is(name));
People people = template.findOne(query, People.class,"people");
update更新
Update update = Update.update("更新字段名", 内容); template.updateFirst(query, update, entityClass, collectionName);
group分组
Criteria criteria = Criteria.where("start").gte(begin).ite(end).and("name").is(name);
MatchOperation match = Aggregation.match(criteria); GroupOperation group = Aggregation.group("start").count().as("count"); // 注group key start会映射成_id,所以要利用project阶段映射回start
ProjectionOperation project = Aggregation.project("count").and("_id").as("start"); Aggregation aggregation = Aggregation.newAggregation(match,group,project); AggregationResults<Map> aggregate = template.aggregate(aggregation, "表名", Map.class);
List<Map> mappedResults = aggregate.getMappedResults();
Criteria 是查询条件,构建对象MatchOperation ,ProjectionOperation ,Aggregation;template是查询的数据库。
SpringDataMongoDB grouop更加详细的内容:https://blog.csdn.net/fs1360472174/article/details/74081487
MongoDB常用查询,排序,group,SpringDataMongoDB update group的更多相关文章
- mongodb常用查询语法
一.查询 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): se ...
- MongoDB 常用查询语法
一.查询 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): se ...
- 记录MongoDB常用查询
{$and:[{"}}]} // flag不等于1 也不等于0 {$or:[{"flag" :{ $ne:"1"}},{"flag" ...
- mongodb常用查询语句
1.查询所有记录db.userInfo.find();相当于:select* from userInfo; 2.查询去掉后的当前聚集集合中的某列的重复数据db.userInfo.distinct(&q ...
- mongodb常用查询语句(转)
1.查询所有记录 db.userInfo.find();相当于:select* from userInfo; 2.查询去掉后的当前聚集集合中的某列的重复数据db.userInfo.distinct(& ...
- mongodb常用查询
mongo sql 说明 db.users.find() select * from users 从user表中查询所有数据 db.users.find({“username” : “joe”, “a ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- Mysql 单表查询-排序-分页-group by初识
Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...
- ysql常用sql语句(12)- group by 分组查询
测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...
随机推荐
- 关于MySQL中pymysql安装的问题。
一 一般情况下我们直接在终端输入: pip3 install pymysql 就能够自动安装成功. 但是有时候我们必须先指定一个python解释器: 比如我们指定python3 在终端cmd输入:py ...
- MySQL 中的三中循环 while loop repeat 的基本用法
-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...
- 安全测试8_Web安全实战2(暴力破解)
1.暴力破解的概念 顾名思义,暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录.因为理论上来说,只要字典足够庞大,枚举总是能够成功的! 2.暴力破解的实战 在有了之 ...
- Linux系统及常用软件的安装
注释:看了很多人说在Windows下面跑机器学习就和大人一直用勺子吃饭一样,应该用更...刚写到这里Linux又奔溃了-- 以后就在Linux上跑程序了,告别Windows的时代... 别看下面的安装 ...
- uva-10341-二分法
题意:已知方程的根在0-1范围内,求解方程的根,如果方程不存在根,那就输出 no solution. 直接二分,保留四位小数. #include "pch.h" #include ...
- 关于 Glassfish
GlassFish 是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发.部署和重新分发.开发者可以免费获得源代码,还可以对代码进行更改 GlassFish 是用于构建 Java EE 5应 ...
- JSP-打印动态表格
input.html <script language="javascript"> function validate(f){ if(!(/\w+/.test(f.in ...
- PHP 服务 php-fpm 的一些常见配置
< 操作系统 Centos7,PHP版本7.2.7 > 已下所有配置涉及到时间单位均使用 => 秒(s) 分 (m) 时 (h) 天(d) [ 以下为全局配置 ] 01,关于,进程文 ...
- 一、Jmeter环境介绍
1.安装 从Apache网站http://jmeter.apache.org/download_jmeter.cgi下载二进制包. .tgz后缀名的为Linux使用的包 .zip后缀的为windows ...
- [记录] CSS 多行文本超出部分省略
如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览 <p style="width: 30 ...