① 怎样统计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里加一个时间来记录存入数据库的时候,然后根据这个时间来排序。