① 怎樣統計mongodb資料庫中商品的總數
db.user.find().count(); ==> 這個快是因為 _id作為主鍵是一個相對小的索引
而對應的mysql里是走的全表掃描
如果你設計的表結構很滿足範式,那麼其實並不是MongoDB所擅長的場景,你不會覺得mongodb有多快
db.com it在線教育
② mongodb 生產環境單張表 多少條數據
Mongodb 貌似不用創建表 ,在插入數據的同時直接就會自動生成表!mongodb資料庫中沒有主外鍵關系,有的只是ref引用……對於document只要從客觀上來講屬於同一類數據,完全可以插入到同一個document中…在應用中,主要應用對象有微博、淘寶客一類終
③ mongodb怎麼查詢一段日期內每天最後一個數據
你需要有一個欄位標示寫入資料庫的時間,然後查詢的時候,設定查詢時間段:db.things.find({"createTime":{"$gt":"2014-10-29 0:0:0"}}) // 大於某個時間db.things.find({"createTime":{"$lt":"2014-10-29 0:0:0"}}) // 小於某個時間db.things.find({"$and":[{"createTime":{"$gt":"2014-10-29 0:0:0"}},{"createTime":{"$lt":"2014-10-29 0:0:0"}}]}) // 某個時間段
④ 如何在Java中對MongoDB按日期進行查詢統計
方法一:通過構造BasicDBObject對象來進行查詢
[java] view plain
int startYear=2015,endYear=2016;
int startMonth=12,endMonth=1;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject("applydate", new BasicDBObject("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).append("$lt", new Date(endYear - 1900, endMonth -1, endDay)));//因為無法確知當前月有多少天,所以就從當月的1號(包含)計到下月1號(不包含)
int iCount = cltApplies.find(query).count();
System.out.println(iCount);
經測試上述代碼執行完畢後iCount為9。也就是在2016-1-1至2016-1-31期間有9條記錄。
方法二:通過BasicDBObjectBuilder對象來查詢:
[java] view plain
int startYear=2016,endYear=2016;
int startMonth=1,endMonth=2;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject();
query.put("applydate", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());
int iCount = cltApplies.find(query).count();
System.out.println(iCount);
上述代碼執行後iCount同樣為9。
注意:因為java.util.Date(year,month,day)這個構造函數中year是超出1900的年數,所以需要減去1900;month從0開始,所以需要減去1。這個問題容易被初學者忽視。
下面擴展地說一下如果要進行帶日期過濾條件的統計,該如何做。
前面的東西都相同,只是在統計的時候需要調用集合的distinct方法。如統計某個欄位不重復的值有哪些,可用如下寫法:
[java] view plain
int startYear=2016,endYear=2016;
int startMonth=1,endMonth=2;
int startDay=1,endDay=1;
BasicDBObject query= new BasicDBObject();
query.put("applydate", BasicDBObjectBuilder.start("$gte", new Date(startYear - 1900, startMonth - 1, startDay)).add("$lt", new Date(endYear - 1900, endMonth - 1, endDay)).get());
List<String> lstUserIds = cltApplies.distinct("userId", query);
System.out.println(lstUserIds.size());
上面這段代碼的執行結果為4。也就是在2016-1-1至2016-1-31之間出現了4個不同的userId。
⑤ mongodb怎麼查詢一天中24個小時內的各個數據集合
你需要有一個欄位標示寫入資料庫的時間,然後查詢的時候,設定查詢時間段:
db.things.find({"createTime":{"$gt":"2014-10-29 0:0:0"}}) // 大於某個時間
db.things.find({"createTime":{"$lt":"2014-10-29 0:0:0"}}) // 小於某個時間
db.things.find({"$and":[{"createTime":{"$gt":"2014-10-29 0:0:0"}},{"createTime":{"$lt":"2014-10-29 0:0:0"}}]}) // 某個時間段
由於Mongodb不是關系型資料庫文件,實際上,它並不存在傳統關系型資料庫中的所謂「資料庫」的概念,但不用擔心,當你第一次新增數據時,mongodb就會以collection集合的形式進行保存和新建,而不需要你手工去新建立。
⑥ 求解決,使用Spring-data-mongodb寫出根據日期時間(按日、周、月、年)進行分組統計數據量,急~在線等
最近在做mongoDB的統計, 有需求是
按照一天24小時分組,
按照一周的7天分組,
按照一個月30天分組,
按照一年12個月分組統計,
mongodb 入庫的時間欄位是 2016-12-12 這樣的字元串格式,並沒有用mongodb的格式UTC,有時差問題.
思路是,只能通過mongodb的 管道 進行層層篩選, 分組的時候使用mongodb的自帶函數,$substr 進行截取進行分組.
db.advPlaysDetails.aggregate([
{
$match: {advId:"1"}
},
{
$match: {playTime:{$gt: "2016-11-29",$lt:"2016-11-31" }}
},
{
$project :{new_time_stamp :{$substr :["$playTime",11,2]},"_id":0,playTimes:1,}
},
{
$group : {_id :"$new_time_stamp", playTimes : {$sum : "$playTimes"}}
}
])
$substr 第一個參數 要切割的欄位, 第二個參數:從第幾個欄位開始切, 第三個欄位:切幾個.
至於統計出來, 比如,一周里,可能有一兩天根本就沒有數據這種情況,可以實現弄一個7天的集合或者數組,里邊數據默認為0 或其他初始值. 至於一個月多少天,不能定死30,應該用Calendar自己去算
⑦ MongoDB的一個collection適合存儲多大的數據量一個DB 呢
Mongodb可以支持linux ,windows, OS X等操作系統,並且同時相應的支持32位和64位的系統。但是要注意的一點是在32位的系統上資料庫的數據總大小有一個2GB的限制。
⑧ mongodb 並發一般有多少
分片是MongoDB提供的一種機制,其可以將大型的集合分割保存到不同的伺服器上。與其他的分區方案相比,MongoDB幾乎能自動為我們完成所有事情。只要我們進行簡單的配置,並告訴MongoDB要分配的數據,它就可以自動維護數據在不同伺服器之間的平衡。.
⑨ mongodb資料庫怎麼樣查詢資料庫的數據的總數量
db.user.find().count(); ==> 這個快是因為 _id作為主鍵是一個相對小的索引 而對應的mysql里是走的全表掃描 如果你設計的表結構很滿足範式,那麼其實並不是MongoDB所擅長的場景
⑩ mongodb 檢索 1000萬條記錄 需要多少時間
cursor.count和cursor.skip。
但是mongodb不保證數據的順序,如果你需要的是最新加入資料庫的那一條doc,你最好在doc里加一個時間來記錄存入資料庫的時候,然後根據這個時間來排序。