2

我有一个字符串转换为 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 ) )
4

1 回答 1

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代替添加额外的分钟以获得更准确的结果。

于 2016-12-29T11:44:23.630 回答