Mongodb Doctrine2 ODM-对象(或嵌入文档)作为_id

Mongodb Doctrine2 ODM-对象(或嵌入文档)作为_id,mongodb,symfony,doctrine-orm,doctrine-odm,Mongodb,Symfony,Doctrine Orm,Doctrine Odm,我有一个流程运行一个增量映射,并将其简化为一个集合,在该集合中,我查看不同时间段的指标—按id和日期分组。因此,我的输出集合本质上有一个复合id来处理分组 { "_id" : { "site" : 67, "dt" : ISODate("2012-07-03T00:00:00Z") }, "value" : { // Metrics here } } 我希望能够使用ODM在我的Symfony2应用程序中获取此集合的

我有一个流程运行一个增量映射,并将其简化为一个集合,在该集合中,我查看不同时间段的指标—按id和日期分组。因此,我的输出集合本质上有一个复合id来处理分组

{
    "_id" : {
        "site" : 67,
        "dt" : ISODate("2012-07-03T00:00:00Z")
    },
    "value" : {
        // Metrics here
    }
}
我希望能够使用ODM在我的Symfony2应用程序中获取此集合的结果-但在
\u id
字段中遇到问题。我想我可以将其指定为
@Id
@embedOne

   /**
    * @MongoDB\Id
    * @MongoDB\EmbedOne(targetDocument="reportId")
    */
   protected $id;
然而,这不起作用。我还尝试使用
strategy=NONE
设置
@Id
,并且我可以使用QueryBuilder获取行,但在尝试创建文档类时出错。我尝试过使用站点id和日期(
67-134137916
),它允许我使用DocumentManager,但我失去了按日期范围查询的功能

有人对如何在Doctrine2的ODM中将对象作为id进行处理有任何意见吗

编辑:
删除了复合主键标记-问题实际上涉及将对象用作主键。

我不确定这是否是问题的核心:


看起来您只能拥有整数和字符串的复合主键(所以没有日期?)。

不幸的是,这是针对ORM的,而不是ODM。不过我刚才确实看过了。谢谢,我和一些同事谈过,你不能在嵌入式文档中使用ISODates作为键。能否将ISODate转换为UTC字符串?您还必须确保对查询进行了重新构造,以便对UTC时间进行范围搜索。谢谢您的回复。实际上,我编辑了我的问题以删除复合键要求,因为我认为我在这里应用的术语是错误的。实际上,为了使用MapReduce进行分组,您最终为您的集合创建了一个多键对象-我认为目前在Doctrine的ODM代码中没有任何支持来处理EmbedOne或散列作为主键。@kmfk:这目前不受支持。请随时在上打开问题,以便我们可以跟踪此功能请求。