仅查询" sec" MongoDate使用PHP的字段

时间:2016-12-29 08:08:37

标签: php mongodb php-mongodb mongodate

我使用

将字符串转换为MongoDate
$dateAdded = new MongoDate(strtotime("$time"));
echo "date ".$dateAdded;

所以我的$dateAdded现在看起来像0.00000000 1482505458。 (这里1482505458是秒数,0.00000000是微秒。)

现在,我的收藏中有一个文件,其中sec = 1482442458,usec = 622000。

 Array ( [_id] => Array ( [addedtime] => MongoDate Object ( [sec] => 1482505458 [usec] => 622000 ) )

如何编写仅与秒字段匹配的查询?

更新

她的尝试是什么:

$date = "2016-12-23 15:04:18";
$m = new MongoClient("mongodb://172.29.0.186:27017");
$dateAdded = new MongoDate(strtotime("+330 minutes",strtotime("$time")));
echo " date ".$dateAdded;

$key = array('$and' => array(array('_id.createdby' => "$user"), array('_id.addedtime' => "$dateAdded")));
$collectionCount->find($key);

它应该匹配:

 Array ( [_id.createdby] => 10006161 ) Array ( [_id] => Array ( [addedtime] => MongoDate Object ( [sec] => 1482505458 [usec] => 622000 ) [empname] => Praveen Valecha [createdby] => 10006161 ) )

1 个答案:

答案 0 :(得分:0)

这不是一个完美的解决方案,但它适合我,应该为大多数想要避免在微秒内搜索时间的人工作。

这是我从问题中提到的代码修改的代码部分:

我创建了一个变量,其时间比我搜索的时间长一分钟。

$dateAdded = new MongoDate(strtotime("+330 minutes",strtotime("$time")));
echo " dateAdded ".$dateAdded;
$dateFinal = new MongoDate(strtotime("+331 minutes",strtotime("$time")));
echo " dateFinal ".$dateFinal;

然后我使用$ gte和$ lt查询@Sammaye建议的日期范围内的文档。

$key = array('_id.addedtime' =>  array('$gte' => $dateAdded, '$lt' => $dateFinal));

注意:您还可以将+1 second添加到$dateFinal,而不是添加额外的分钟以获得更准确的结果。