Mongodb Java count 用法記錄(巢狀欄位也是可以的)
阿新 • • 發佈:2018-12-24
當你需要確定某個欄位等於“xxxxx”的記錄在mongodb裡面到底有多少條的時候,就可以使用這個count。
我這使用的是 spring-data-mongodb-1.5.0 來訪問資料庫的。
然後就是看看,怎麼在這個mongodb視覺化資料庫訪問工具裡面使用這個count方法
有需要的,而且,恰好,你也是這麼個套路,那就好啦
我這使用的是 spring-data-mongodb-1.5.0 來訪問資料庫的。
本以為這個只是支援簡單的某個欄位 A="xxx" 這種簡單的count查詢,後來實際測試下發現,針對巢狀的欄位,也是可以的。
首先這地方得有個複雜的,帶有巢狀欄位的一個model。
先看下簡單的json資料
然後就是簡單的Java model啦{ "_id" : ObjectId("597f0661e4b0b36fc16aebb4"), "title" : "大神lxk", "baselinesetting" : { "customMetricCalculations" : [{ "alarmHandleSetting" : { "times" : 0, "calendarId" : "32RJePzB" } }] }, "alarmsettings" : [{ "alarmHandleSetting" : { "times" : 0, "calendarId" : "32RJePzB" } }, { "alarmHandleSetting" : { "times" : 0, "calendarId" : "EVIWBAeR" } }] }
@Document(collection = "streams") public class Stream implements Serializable, Cloneable { xxxxx//省略了很多多餘的屬性和getter和setter方法 @Id private String id; private BaselineSetting baselinesetting; private List<Alarmsetting> alarmsettings; } @Data public class Alarmsetting implements Serializable { xxxxx//省略了很多多餘的屬性和getter和setter方法 private AlarmHandleSetting alarmHandleSetting; } @Data public class AlarmHandleSetting { xxxxx//省略了很多多餘的屬性和getter和setter方法 private int times; private String calendarId; } @ResourceName("default_setting") public class BaselineSetting implements Serializable { xxxxx//省略了很多多餘的屬性和getter和setter方法 private List<CustomMetricCalculation> customMetricCalculations; } @Data public class CustomMetricCalculation implements Comparable<CustomMetricCalculation> { xxxxx//省略了很多多餘的屬性和getter和setter方法 private AlarmHandleSetting alarmHandleSetting; }
然後就是看看,怎麼在這個mongodb視覺化資料庫訪問工具裡面使用這個count方法
可以看到,這個工具確實可以這麼直接count。
下面看Java 程式碼怎麼實現這個功能。
//這地方是實現了2個介面,一個是框架帶的,一個是自定義的 @Repository("streamRepository") public interface StreamRepository extends MongoRepository<Stream, String>, StreamRepositoryCustom { xxxx //類似這種的很多的自定義查詢方法 @Query("{'id':?0}") Stream findById(String id); } //自定義介面 public interface StreamRepositoryCustom { long count(String calendarSId); } //實現自定義介面的方法 public class StreamRepositoryImpl implements StreamRepositoryCustom { @Autowired private MongoTemplate mongoTemplate; Query query = Query.query(Criteria.where("alarmsettings.alarmHandleSetting.calendarId").is(calendarSId)); return mongoTemplate.count(query, Stream.class); } //service中呼叫dao方法。 @Service("streamService") public class StreamService { @Resource(name = "streamRepository") private StreamRepository dao; long countCalendarSIdIsUsedInAlarm(String sId) { return dao.countCalendarSIdIsUsedInAlarm(sId); } }
有需要的,而且,恰好,你也是這麼個套路,那就好啦
那問題就解決啦。