日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

mongodb常用语句以及SpringBoot中使用mongodb

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongodb常用语句以及SpringBoot中使用mongodb 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

普通查詢

某個字段匹配數組內的元素數量的,假如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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。