我是Mongo DB初学者。
我必须创建一个可以存储事件的集合。 Event中的所有文档都有一个FROM_TIME和TO_TIME键,其值可以如下变化:
鉴于FROM_TIME和TO_TIME的随机发生,是否可以查询以下事件:
我请求此处的人提供潜在客户,以防我需要重新考虑我的收藏结构,因为我对Mongo(或任何其他非关系型)数据库非常天真。
* * * 1st Edit从这里开始
我写了以下代码:
DBObject dbObject = new BasicDBObject();
dbObject.put("EVNTATMC_ID", new ObjectId());
dbObject.put("EVNTATMC_DESC", "Pearl Harbour");
dbObject.put("EVNTATMC_FROM_TIME", Date.valueOf("1944-12-07"));
dbObject.put("EVNTATMC_TO_TIME", Date.valueOf("1944-12-07"));
dbObject.put("EVNTATMC_EVNTCMPD_ID", new ObjectId());
dbObject.put("EVNTATMC_MTRL_ID", null);
// dbObject.put("EVNTATMC_AUDIT", 1);
dbObject.put("EVNTATMC_REMARKS", "First insert");
eventAtomic.insert(dbObject);
dbObject = new BasicDBObject();
dbObject.put("EVNTATMC_ID", new ObjectId());
dbObject.put("EVNTATMC_DESC", "1857 Revolt");
dbObject.put("EVNTATMC_FROM_TIME", "1857");
dbObject.put("EVNTATMC_TO_TIME", "1858");
dbObject.put("EVNTATMC_EVNTCMPD_ID", new ObjectId());
dbObject.put("EVNTATMC_MTRL_ID", null);
// dbObject.put("EVNTATMC_AUDIT", 1);
dbObject.put("EVNTATMC_REMARKS", "Only years");
eventAtomic.insert(dbObject);
在这里,我愚蠢地使用String来存储不完整的日期,但我应该如何存储一年如1992年,2001年,2012年或仅仅一个月,如1月,9月或类似于2010年8月?我不确定我是否期待正确的事情!请指导我如何处理这种“不完整”的时间。
* * * 1st Edit在此结束
答案 0 :(得分:1)
将FROM_TIME和TO_TIME存储为DateTime。看这里: http://www.mongodb.org/display/DOCS/Dates
然后,你可以查询(例如rang查询)
看到答案:
https://stackoverflow.com/a/8136834/131809
因此,对于2012年8月15日的所有活动:
var start = new Date(2012, 08, 15);
var end = new Date(2012, 08, 16);
db.myEventCollection.find({created_on: {$gte: start, $lt: end}});