2012-07-04 73 views
2

我有一個進程運行增量映射減少到一個集合,我正在查看指標在不同的時間段 - 按ID和S分組。所以我的輸出集合本質上有一個複合ID來處理分組。Doctrine2 ODM - 對象(或嵌入式文檔)作爲_id

{ 
    "_id" : { 
     "site" : 67, 
     "dt" : ISODate("2012-07-03T00:00:00Z") 
    }, 
    "value" : { 
     // Metrics here 
    } 
} 

我希望能夠獲取使用ODM在我的Symfony2應用程序從這個集合的結果 - 但有與_id場的麻煩。我想我或許可以將其指定爲@Id@embedOne

/** 
    * @MongoDB\Id 
    * @MongoDB\EmbedOne(targetDocument="reportId") 
    */ 
    protected $id; 

但是,這是行不通的。我也嘗試使用strategy=NONE設置@Id,我可以使用QueryBuilder來獲取行,但在嘗試水化我的Document類時會出錯。我試圖壓制網站ID和日期(67-134137916),它允許我使用DocumentManager,但我失去了查詢日期範圍的能力。

任何人都有關於如何在Doctrine2的ODM中處理對象作爲id的任何輸入,是否支持?

編輯: 刪除複合主鍵標籤 - 問題確實涉及到使用對象作爲主鍵。

回答

1

我不知道這是否得到你的問題的心臟:(?所以沒有日期)Composite Primary Keys tutorial

它看起來像你只能有整數和字符串的複合主鍵。

+0

不幸的是,這是針對ORM的,而不是ODM。不過我在前一段時間看過。謝謝 – kmfk

+0

好的,我和一些同事談過了,你不能使用ISODates作爲嵌入式文檔中的鍵。你可以將ISODate轉換爲UTC字符串嗎?您還必須確保您的查詢已重新組織爲UTC時間範圍搜索。 – Jenna

+0

感謝您的回覆。我實際上編輯了我的問題以刪除組合鍵要求,因爲我認爲我在這裏錯誤地應用了術語。真的,爲了與MapReduce進行分組,你最終爲你的集合創建了一個多鍵對象 - 我不相信目前Doctrine的ODM代碼支持將EmbedOne或Hash作爲主鍵。 – kmfk