记一次mongodb查询的问题
问题描述
同样的代码,重复执行后就会出现查询超时的错误。
代码类似如下:
$start = file_get_contents('start.pid');
if (!$start) {
$start = 0;
}
$conditions = array(
'id' => array(
'$gt' => $start,
),
);
$conn = new MongoClient('mongodb://127.0.0.1:27017');
$dataList = $conn->db->table->find($conditions)->limit(10);
foreach ($dataList as $data) {
// 具体逻辑
}
问题排查
看了explain的信息,没发现任何问题,想到mongo有提供shell操作。
执行以下命令
db.table.find({"id":{"$gt":"12998"}}).limit(1)
// 输出为空
执行以下命令
db.table.find({"id":{"$gt":12998}}).limit(1)
// 输出查询结果
对比上面两个命令,发现区别在于条件里的类型。
事后查了下资料,发现mongodb的字段类型必须一致。
资料参考:
为什么mongodb的字段会有类型之分