记一次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的字段会有类型之分

标签: mongodb

添加新评论