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