Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Doctrine ODM查询生成器返回的结果与原始查询不同_Php_Mongodb Query_Doctrine Odm_Php Mongodb - Fatal编程技术网

Php Doctrine ODM查询生成器返回的结果与原始查询不同

Php Doctrine ODM查询生成器返回的结果与原始查询不同,php,mongodb-query,doctrine-odm,php-mongodb,Php,Mongodb Query,Doctrine Odm,Php Mongodb,如果数据不存在,或者数据存在且时间早于…,我会尝试使用条件过滤一些结果。 我使用PHP查询生成器进行了查询构建 ->addOr( ['interactions.lastDisplays' => ['$elemMatch' => [ 'user' => new \MongoId($id), 'date' => ['$lte' => $date] ]]

如果数据不存在,或者数据存在且时间早于…,我会尝试使用条件过滤一些结果。

我使用PHP查询生成器进行了查询构建

 ->addOr(
            ['interactions.lastDisplays' => ['$elemMatch' => [
                'user' => new \MongoId($id),
                'date' => ['$lte' => $date]
            ]]],
            ['interactions.lastDisplays.user' => ['$ne' => new \MongoId($id)]]
        )
并登录到:

db.Post.find({ 
"$or": [ 
{ "interactions.lastDisplays": { 
    "$elemMatch": { "user": ObjectId("5a61bb816e0bb1542a0bc574"),
    "date": { "$lte": new ISODate("2019-06-14T13:22:01+00:00") } } } },
{ "interactions.lastDisplays.user": { 
    "$ne": ObjectId("5a61bb816e0bb1542a0bc574") } 
}] 
}).limit(25).skip(0);

出于某种原因,它不会在PHP中返回任何结果。当我复制它并直接在数据库上运行时,它工作正常,所有25个结果都会返回。

解决方案非常简单,只需将
$lte
更改为MongoDate即可

 ->addOr(
        ['interactions.lastDisplays' => ['$elemMatch' => [
            'user' => new \MongoId($id),
            'date' => ['$lte' => $new \MongoDate($date->getTimestamp())]
        ]]],
        ['interactions.lastDisplays.user' => ['$ne' => new \MongoId($id)]]
    )
奇怪的是,我还不明白它在其他查询中使用的是
DateTime
(但它们没有嵌套的数组条件,所以这可能是问题所在)。而且这个查询日志也是一样的