我使用
将字符串转换为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 ) )
答案 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
,而不是添加额外的分钟以获得更准确的结果。