Doctrine2 mongodb和Timestamp

时间:2014-11-04 11:56:33

标签: mongodb doctrine-orm

我使用doctrine 2写入mongodb,实体看起来像这样:

{
  "_id" : ObjectId("54538be2516bd636738b46f2"),
  "department" : "Assistance",
  "action" : "DONE",
  "idAppointment" : 2197,
  "service_order" : "F4889109",
  "access_number" : "164016178",
  "so_type" : "DERA",
  "stage" : "D40",
  "id_va" : "FT452926",
  "id_icms" : "F4889109",
  "ref_isp" : "",
  "comment" : "",
  "first_available_schedule" : Timestamp(1414623600, 168),
  "asap" : false,
  "allday" : "NO",
  "operator" : "HD8",
  "created" : Timestamp(1414761442, 169)
}

现在我想使用querybuilder或命令行查询时间戳,但我不知道如何执行此操作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于初学者,当您实际使用Timestamp类型时,您似乎正在使用Date BSON类型。在ODM中,它们分别使用@Timestamp@Date注释。在PHP驱动程序中,相关的驱动程序类分别为MongoTimestampMongoDate

正如上面所述的BSON文档链接所述,Timestamp供内部使用(MongoDB在复制oplog中使用它)。如果您在应用程序中存储日期和时间,则日期时间肯定是您应该使用的。

查看ODM文档中的@Timestamp示例,相当不幸的是,该示例在$created字段中显示了该示例。我们最好使用不那么令人鼓舞的字段名称,并添加一条注释,用户可能不希望将字段映射为@Timestamp

如果您确实将字段映射为@Date,则应该能够像使用任何其他字段和运算符一样使用查询构建器(与日期值相关)。准备查询时,DocumentPersister::prepareQueryOrNewObj()最终将通过DateType::convertToDatabaseValue()运行与日期映射字段对应的查询值。这意味着该值可以是整数时间戳,DateTime或MongoDate实例。字符串也适用,只要它与strtotime()一起使用。