mongodb中查询,java

mongodb中一条数据某个属性存了一个集合,我在查询的时候传入一个参数,只要这个参数出现在存的这个集合中,就查出这条数据..怎么操作... mongodb中一条数据某个属性存了一个集合,我在查询的时候传入一个参数,只要这个参数出现在存的这个集合中,就查出这条数据..怎么操作 展开
 我来答
借口多心自亡桶
2017-03-30 · TA获得超过198个赞
知道答主
回答量:298
采纳率:0%
帮助的人:75.3万
展开全部
方法一:通过构造BasicDBObject对象来进行查询
[java] view plain copy
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 copy
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 copy
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。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式