我使用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或命令行查询时间戳,但我不知道如何执行此操作。任何帮助将不胜感激。
答案 0 :(得分:1)
对于初学者,当您实际使用Timestamp类型时,您似乎正在使用Date BSON类型。在ODM中,它们分别使用@Timestamp
和@Date
注释。在PHP驱动程序中,相关的驱动程序类分别为MongoTimestamp和MongoDate。
正如上面所述的BSON文档链接所述,Timestamp供内部使用(MongoDB在复制oplog中使用它)。如果您在应用程序中存储日期和时间,则日期时间肯定是您应该使用的。
查看ODM文档中的@Timestamp
示例,相当不幸的是,该示例在$created
字段中显示了该示例。我们最好使用不那么令人鼓舞的字段名称,并添加一条注释,用户可能不希望将字段映射为@Timestamp
。
如果您确实将字段映射为@Date
,则应该能够像使用任何其他字段和运算符一样使用查询构建器(与日期值相关)。准备查询时,DocumentPersister::prepareQueryOrNewObj()
最终将通过DateType::convertToDatabaseValue()
运行与日期映射字段对应的查询值。这意味着该值可以是整数时间戳,DateTime或MongoDate实例。字符串也适用,只要它与strtotime()
一起使用。