普通查询

某个字段匹配数组内的元素数量的,假如region只有一个元素的
db.getCollection('map').find({region:{$size:1}})
假如region只有0个元素的
db.getCollection('map').find({region:{$size:0}})
db.getCollection('map').find({region:{$size:1}}).count()
db.getCollection('map').find({"area":{$gt:[]}}).count()
db.getCollection('map').find({"area":{$eq:[]}}).count()字段为[]
db.getCollection('map').find({"address_city":{$eq:[]}})
字段不存在
db.getCollection('map').find({"local":{$exists:false}});这个不能按>和<查询
db.getCollection('map').find({"type":"3"})
db.map.find({"type":"3"})

找出非空

db.getCollection('表').find({"字段":{$exists:true}});

查_id需要注意

db.map_area.find({"_id":ObjectId("5811c104dd908725398b5XXX")})

mongodb原生正则查询

任意匹配
db.getCollection('表').find({"description":/玉兰小区/});
前缀
db.getCollection('表').find({"description":/^玉兰/});
加i兼容大小写
db.getCollection('表').find({"station_area":/EC/i});

spring MongoDB

 //等效criteria.andOperator(criteria.where("name").regex(".*" + v + ".*"));criteria.andOperator(criteria.where("name").regex(".*\\" + v + "\\.*"));criteria.andOperator(criteria.where("name").regex(".*?" + v + ".*"));//前缀查询criteria.andOperator(criteria.where("name").regex(".*^" + v + ".*"));

条件查询

//完全匹配
Pattern pattern = Pattern.compile("^商品$", Pattern.CASE_INSENSITIVE);
//右匹配
Pattern pattern = Pattern.compile("^.*商品$", Pattern.CASE_INSENSITIVE);
//左匹配
Pattern pattern = Pattern.compile("^商品.*$", Pattern.CASE_INSENSITIVE);
//模糊匹配
Pattern pattern = Pattern.compile("^.*商品.*$", Pattern.CASE_INSENSITIVE);
Query query = Query.query(Criteria.where(fieldName).regex(pattern));
List<UserInfo> users = mongoTemplate.find(query, UserInfo.class, classname);

返回指定字段

只返回address,不要id。注意前面的{}不可少

db.getCollection('user').find({},{address:1,_id:0})

数字查询mongodb原生语句

db.getCollection('表').find({"number": {$regex: '76', $options:'i'}});

Java代码同时多条件or查询

Pattern pattern = Pattern.compile(search, Pattern.CASE_INSENSITIVE);criteria.orOperator(criteria.where("name").regex(".*?\\" + search + ".*"),criteria.where("number").regex(pattern));

查询大于某个字段长度的列表

db.getCollection('表').find({"字段": {"$exists": true, "$regex": /^.{5,}$/}}).limit(5)

更新数据

db.t1.updateOne({"_id":ObjectId("523eb382d7f8b9ac3b18b4571")},
{"$set":{"name":"XXX1"}})
Query query = Query.query(Criteria.where("_id").is("53eb382d7f8b9ac3b18b4574"));
Update update = Update.update("_id", "53eb382d7f8b9ac3b18b4574").set("name","xxx22").set("description","xxxx22");

in查询

原生语句

in查询
db.getCollection('表').find({$or:[{number:"01"},{number:"02"}]})
db.getCollection('表').find({$or:[{number:"01"},{number:"02"},{status:1}]})

spring中MongoTemplate

Query query = new Query();
Criteria criteria = new Criteria();
if (condition.getType().equals("in")) {List<String> v = Arrays.asList(condition.split(","));criteria.andOperator(criteria.where("name").in(v));
}
query.addCriteria(criteria);

多条件查询or

Criteria c1= Criteria.where("name").is("XXX");
Criteria c2= Criteria.where("number").is("01");Criteria cr = new Criteria();
Query query = new Query();
query.addCriteria(cr.orOperator(c1,c2));

and

query.addCriteria(cr.andOperator(c1,c2));

多条件查询也可以这样写:

Criteria criteria = new Criteria().andOperator(  Criteria.where("id").is(28),  Criteria.where("name").is("123")
);  

动态拼凑Criteria

Query query = new Query();
Criteria cr = new Criteria();List<Criteria> criteriaList=new ArrayList<>();
//这里可以写for循环
Criteria c1= Criteria.where("name").is("XXX");
criteriaList.add(c1);
Criteria c2= Criteria.where("number").is("01");
criteriaList.add(c2);if(criteriaList.size()>0) {Criteria[] criteriaArray = criteriaList.toArray(new Criteria[criteriaList.size()]);cr.andOperator(criteriaArray);
}
query.addCriteria(cr);if (select != null && select.size() > 0) {for (String tmp : select) {query.fields().include(tmp);}
}
List<User> list = mongoOperations.find(query, clazz);

这个写的还可以,比较全,可以延伸参考下:https://blog.csdn.net/weixin_43935907/article/details/86568387

分页

先看这个:https://www.cnblogs.com/woshimrf/p/mongodb-pagenation-performance.html

//当前第0页,每页2条

query.skip(page*row);
query.limit(row);

分页要注意 skip要*row

public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getSkip() {skip=(pageNo-1)*pageSize;return skip;}public void setSkip(int skip) {this.skip = skip;}

参考https://blog.csdn.net/congcong68/article/details/47624221

分页参考:https://blog.csdn.net/u013042707/article/details/82668613?utm_source=blogxgwz1

Criteria c1=null;Criteria c2=null;Criteria c3=null;ArrayList<Criteria> list=new ArrayList<Criteria>();if (vo.getCatalog1()!=null){c1 = Criteria.where(MyBean.FILD_CATALOG1).is(vo.getCatalog1());list.add(c1);}if (vo.getCatalog()!=null){c2=Criteria.where(MyBean.FILD_CATALOG).is(vo.getCatalog());list.add(c2);}if (vo.getTitle()!=null){//模糊查询c3=Criteria.where(MyBean.FILD_TITLE).regex(".*?\\" +vo.getTitle()+ ".*");list.add(c3);}Criteria[] arr=new Criteria[list.size()];list.toArray(arr);Criteria criteria=new Criteria().andOperator(arr);Query query=new Query(criteria);query.skip((vo.getPage()-1)*vo.getPageSize());query.limit(vo.getPageSize());List<MyBean>  list= mongoTemplate.find(query, MyBean.class);return list;

分页排序

//分页和排序if (simplePageRequest.getPage() != null && simplePageRequest.getRows() != null) {query.skip(simplePageRequest.getPage() - 1);query.limit(simplePageRequest.getRows());
}if (simplePageRequest.getSort() != null && simplePageRequest.getOrder() != null) {Sort.Direction SortDirection;if (simplePageRequest.getSort().toLowerCase().equals("asc")) {SortDirection = Sort.Direction.ASC;} else {SortDirection = Sort.Direction.DESC;}Sort sort = new Sort(SortDirection, simplePageRequest.getOrder());query.with(sort);
}

说明:多个排序参数

Sort sort = new Sort(Sort.Direction.ASC, “ID”).and(new Sort(Sort.Direction.ASC, “TIME”));

查看索引:

db.getCollection('表').getIndexes()

查询数组个数限制

https://docs.mongodb.com/manual/reference/operator/query/size/

img是个数组,需要数组个数>2个

写法1:这是一种比较骚的写法,一般看不明白:

MongoDB下根据数组大小查询

criteria.and("img.2").exists(true);

写法2:取反

criteria.norOperator( Criteria.where("img").size(0));

写法3:枚举  有局限多了不好搞  这实际上是查单个等于的

criteria.orOperator(Criteria.where("img").size(3),Criteria.where("img").size(4),Criteria.where("img").size(5),Criteria.where("img").size(6));

不为空不为null

criteria.and("img").ne("").ne(null);

扩展参考:

mongodb查询非空数组的几种方法

Spring Data Mongodb的Criteria类(all、and、andOperator、elemMatch)

查询数组:

包含,完全匹配

https://blog.csdn.net/leshami/article/details/55049891

mongodb常用语句以及SpringBoot中使用mongodb相关推荐

  1. MongoDB常用语句

    记录一下MongoDB常用语句,顺带与SQL做个简单的对比. 1.查询(find) (1)查询所有结果 select * from articledb.article.find() (2)指定返回哪些 ...

  2. mongodb常用语句(集合操作)

    mongodb常用语句(集合操作) 查看集合帮助 db.songs.help(); 查看集合总数据量 db.songs.count(); 查看表空间大小 db.songs.dataSize(); 查看 ...

  3. MongoDB常用语句小册

    MongoDB常用语句小册 最近MongoDB使用的比较多,但是毕竟不像MySQL这种用了好多年的数据库,语句信手拈来,有的时候还是需要想一想才能写出来,于是把常用的CRUD语句整理一下,方便查阅. ...

  4. MongoDB简介、在node中使用MongoDB

    MongoDB数据库简介: 使用MongoDB的好处是不用SQL语句,它提供了对应的API,其功能和MYSQL基本相同,是最像关系型数据库的非关系型数据库:不需要设计表的结构,文档相当于json,如果 ...

  5. 软件测试mysql常用语句_测试中常用到的SQL语句(Oracle)

    在测试过程中,可能会进入到数据库中检查数据. 下面列举一些经常用到的SQL语句. (1)删除记录(delete与truncate) 语法:delete from  表名 where 条件 trunca ...

  6. oracle tabe unlock_oracle数据库管理常用语句(不断更新中)

    1.删除用户及其用户下面的所有对象 drop user branch cascade; 2.删除表空间及其表空间里的所有内容 drop tablespace center INCLUDING CONT ...

  7. oracle mysql 常用语句(查询表中某字段有几种类型,及每种类型有多少个数、插入多行、查询前几行)

    亲测有效 1.(1)查询表中某字段有几种类型,及每种类型有多少个数 select DISTINCT name user_name,count(*) num from patient GROUP BY ...

  8. MongoDB副本集搭建及在springboot中使用

    MongoDB副本集搭建及在springboot中使用 一.mongoDB副本集的搭建 原则就是一台master(主),一台salve(从),一台arbiter(仲裁) 1.下载mongoDB htt ...

  9. springboot中mongodb自定义类型转换器

    文章目录 1 场景 1.1 BigDecimal写入mongo 1.2 人工转换 1.3 自定义转换器 2 版本 3 步骤 3.1 定义转换器 3.2 配置mongoDb工厂类 3.3 加载自定义转换 ...

最新文章

  1. 终于把XGBoost总结写出来了!
  2. 对前端界面工程师这个职位是怎么样理解的?
  3. python项目实战:爬取无限火力大暴起全章节
  4. 如何用python写程序设置当前打印机为默认打印机_从Python打印到标准打印机?
  5. C++Study 指针详解
  6. Qt Creator进阶使用
  7. devstack安装OpenStack Pike版本 (OVN+VLAN)
  8. 看看80万程序员怎么评论:前端程序员会不会失业?
  9. 产品经理学习---高级产品经理
  10. Introduction to the Linux Kernel
  11. 神经网络之BP神经网络
  12. Ural 1043 Cover the Arc
  13. android解析json数据 no value for message_Hive使用lateral view和explode处理嵌套json
  14. @EnableWebMvc引发的swagger-ui.html的灾难
  15. HTTP请求tomcat版本升级无法识别问题
  16. 中国移动(ECIA)云网工程师技术知识-立哥技术
  17. linux无法访问移动硬盘,移动硬盘“无法访问”的解决方案
  18. Oracle Golden Gate 系列二 -- GG 的系统需求
  19. 洛谷 P1144 最短路计数 dijkstra
  20. pe卸载win10更新补丁_win10补丁,小编告诉你如何卸载Win10上已安装的更新补丁

热门文章

  1. 航空频率表 2020_飞亚达2020时光勋章品牌年会——往昔作序,来日为章
  2. python image stiching_Python自然语言处理,词云图生成
  3. 动态图相册 android,‎App Store 上的“动态图相册”
  4. Iar环境c语言调用汇编函数,如何在IAR EWARM中通过内联汇编程序在另一个模块中调用C函数?...
  5. java 3gpp转mp3_Android音频以及音频播放器开发实例
  6. Keras TensorFlow教程:使用自己的数据集进行训练
  7. 前端HTML渲染带箭头的线
  8. 数字图像处理:腐蚀与膨胀操作
  9. 开发者如何构建技术影响力
  10. c++创建包含opencv的dll供C,C#调用