PHP MongoDB与MongoDate上的查询结果不一致

时间:2014-01-26 11:49:27

标签: php mongodb

我在分片的MongoDb设置上运行一个非常基本的脚本来选择给定日期的消息数。 但是,多次运行会导致结果不一致,有时会返回数字,有时只会返回0.

mongodb服务器的版本为2.4.3

我在这里遗漏了什么吗?

这是剧本:

<?php

$mongo = new MongoClient("mongodb://127.0.0.1:27017");
$db = $mongo->selectDB('database');

$messages = $db->selectCollection('messages');

$date1 = new MongoDate(strtotime('2013-10-20'));
$date2 = new MongoDate(strtotime('2013-10-21'));

var_dump($date1);
var_dump($date2);

$iterator = $messages->find(array('date_replied' => array('$gte' => $date1, '$lt' => $date2)));

$count = $iterator->count();
var_dump($count);

这就是结果,2次直接跟在对方之后:

~$ php -f mongo.php 
object(MongoDate)#4 (2) {
  ["sec"]=>
  int(1382220000)
  ["usec"]=>
  int(0)
}
object(MongoDate)#5 (2) {
  ["sec"]=>
  int(1382306400)
  ["usec"]=>
  int(0)
}
int(494921)
~$ php -f mongo.php 
object(MongoDate)#4 (2) {
  ["sec"]=>
  int(1382220000)
  ["usec"]=>
  int(0)
}
object(MongoDate)#5 (2) {
  ["sec"]=>
  int(1382306400)
  ["usec"]=>
  int(0)
}
int(0)

1 个答案:

答案 0 :(得分:2)

您的数据库可能已损坏。你能做一个db.repairDatabase()并再试一次吗?它尝试重新创建索引失败了,我在分布式集合中遇到了类似的问题。

请记住,修复将阻止整个数据库操作,并可能丢弃任何损坏的数据。小心行事!