0

我是 Mongo DB 初学者。

我必须创建一个可以存储事件的集合。事件中的所有文档都将具有 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 月”}

鉴于 FROM_TIME 和 TO_TIME 的随机发生,是否可以查询以下事件:

  1. 19世纪下半叶事件列表
  2. 8 月 15 日的事件列表等等。

我要求这里的人们提供线索,以防我需要重新考虑我的集合的结构,因为我对 Mongo(或任何其他非关系)DB 非常天真。

* * *第一次编辑从这里开始

我写了以下代码:

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 这样的一年或像 January、September 或像 August 2010 这样的一个月?我不确定我是否期待正确的事情!请指导我如何处理这种“不完整”的时间安排。

* * *第一次编辑到此结束

4

1 回答 1

1

将 FROM_TIME 和 TO_TIME 存储为 DateTime。见这里: http ://www.mongodb.org/display/DOCS/Dates

然后,您可以查询(例如响查询)
在此处查看答案: 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}});
于 2012-11-19T11:35:08.397 回答