2012-11-19 24 views
0

我是一個Mongo DB初學者。Mongodb - 事件的數據類型

我必須創建一個可以存儲事件的集合。在這一事件的所有文件都會有FROM_TIME和TO_TIME鍵,其值可以作爲變化如下:

  1. {FROM_TIME: 「九月1,1939」,TO_TIME: 「1945年8月」}
  2. {FROM_TIME:「 1947年8月15日「,TO_TIME:」August 15,1947「}
  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:」November 1972「}

鑑於FROM_TIME和TO_TIME的隨機發生,纔有可能來查詢類似事件:在19世紀的事件

  • 列表下半年事件的

    1. 列表8月15日 等等。

    我請求這裏的人提供線索,以防我需要重新考慮我的集合的結構,因爲我在Mongo(或任何其他非關係型)數據庫中相當幼稚。

    * * * 1日編輯從這裏開始

    我寫了下面的代碼:

    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); 
    

    在這裏,我默默地用字符串保存不完整的日期,但我應該如何存儲只是像今年1992年,2001年,2012年還是像1月,9月那樣的一個月,或者像2010年8月那樣?我不確定我是否期待正確的事情!請指導我如何處理這種「不完整」的時間安排。

    * * * 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}}); 
    
    +0

    喜alexjamesbrown, 我已經閱讀過日期文檔。在發佈問題之前,我不確定該數據類型是否允許僅存儲年份,僅月份和年份,僅月份或此類「不完整」日期數據;你也提供了一個線程說'你不能直接查詢按日期或日期組件的MongoDB收集'。 請指導。 –

    +0

    你不能直接查詢「月」,但你可以查詢範圍...所以,按月查詢,按照我的例子,你可以查詢大於2012年1月1日並且小於2012年2月1日 – Alex

    +0

    我有編輯我的問題 - 添加一個代碼片段,展示我的確切查詢。請看看並指導我。 –