日期之间的mongodb原则

日期之间的mongodb原则,mongodb,symfony,doctrine-orm,doctrine-odm,Mongodb,Symfony,Doctrine Orm,Doctrine Odm,这是我的领域,我正试图与教条打交道 { "_id" : ObjectId("5512f2ae73d151bb528b4589"), "name" : "Strandby-1", "enddate" : ISODate("2015-03-31T22:00:00.000Z"), "startdate" : ISODate("2015-03-24T23:00:00.000Z") } 现在我试着在我的存储库中找到它 $time = new \DateTime(); $q

这是我的领域,我正试图与教条打交道

{
    "_id" : ObjectId("5512f2ae73d151bb528b4589"),
    "name" : "Strandby-1",
    "enddate" : ISODate("2015-03-31T22:00:00.000Z"),
    "startdate" : ISODate("2015-03-24T23:00:00.000Z")
}
现在我试着在我的存储库中找到它

$time = new \DateTime();
$query = $this->createQueryBuilder();
$query
    ->field('startdate')->gte($time)
    ->field('enddate')->lte($time)
;
return $query->getQuery()->getSingleResult();
但我只是得到了
null


我总是在
$time=new\MongoDate()的地方尝试
但仍然得到
null

原则也会将DateTime、string time或timestamp自身转换为MongoDate, 查看条令\mongodb odm\lib\doctor\odm\mongodb\Types\DateType.php

public static function getDateTime($value)
{
    $datetime = false;
    $exception = null;

    if ($value instanceof \DateTime || $value instanceof \DateTimeInterface) {
        return $value;
    ...
这就是所谓的

public function convertToDatabaseValue($value)
{
    if ($value === null || $value instanceof \MongoDate) {
        return $value;
    }

    $datetime = self::getDateTime($value);
所以问题不在于日期类型。你的问题在逻辑上

您正在尝试获取startdate>=now>=enddate的对象

试试这个:

->field('startdate')->lte($time)
->field('enddate')->gte($time)

它可能是OT,但我在您的对象中没有看到
league
字段。只是将其删除,因为这与查询没有任何关联,并且查询仍然为空