MongoDB查询
指定查询并排序
1 | 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}) |
返回指定字段
1 | db.getCollection( 'location' ).find({},{ "site.id" : 1}).pretty() |
1 | db.getCollection( 'vehicle.abilities' ). find ({},{ "_id" :0, "vid" :1, "data_range" :1}) |
0表示的是不返回_id字段,1表示返回对应的字段vid,data_range。
或运算($or)
1 | db.getCollection( 'people' ).find({$ or : [{_id:ObjectId( "5bae04f2ea403100054bfea4" )},{_id:ObjectId( "5bae028fea403100054bfea2" )}]}) |
查询id在指定数组结果($in)
1 | 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
简单查询
1 2 3 | MongoTemplate template = factory.getMongoTemplate(DATABASE_NAME); Query query = query(where( "name" ).is(name)); People people = template.findOne(query, People. class , "people" ); |
update更新
1 2 3 | 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
, SpringDataMongoDB
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架