Mongodb - 事件的数据类型

时间:2012-11-19 10:12:56

标签: mongodb non-relational-database nosql

我是Mongo DB初学者。

我必须创建一个可以存储事件的集合。 Event中的所有文档都有一个FROM_TIME和TO_TIME键,其值可以如下变化:

  1. {FROM_TIME:“1939年9月1日”,TO_TIME:“1945年8月”}
  2. {FROM_TIME:“1947年8月15日”,TO_TIME:“1947年8月15日”}
  3. {FROM_TIME:“1857”,TO_TIME:“1858”}
  4. {FROM_TIME:“1944年12月7日11:00”,TO_TIME:“1944年12月7日14:40”}
  5. {FROM_TIME:“1971年1月”,TO_TIME:“1972年11月”}
  6. 鉴于FROM_TIME和TO_TIME的随机发生,是否可以查询以下事件:

    1. 19世纪下半叶的事件清单
    2. 8月15日的活动清单 等等。
    3. 我请求此处的人提供潜在客户,以防我需要重新考虑我的收藏结构,因为我对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在此结束

1 个答案:

答案 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}});