Don 发布的文章

curl命令不显示统计信息"% Total % Received %

今天发现在shell脚本里执行curl命令,会自动加上统计信息。

代码如下:

#!/bin/sh

echo `curl -I "http://www.qq.com"`

输出如下:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
 X-Cache: HIT from shenzhen.qq.com7 GMT2

curl命令加上-s参数即可不输出统计信息。

mongodb如何实现group by查询

查询命令用到了mongodb的管道命令。

命令如下:

db.table.aggregate([{$group : {_id : "$field", num_tutorial : {$sum : 1}}}])

$field 表示按field字段进行分组。
$sum 表示计算总和,默认值为1。

如果还需要按总和倒叙排列,命令如下:

db.table.aggregate([{$group : {_id : "$field", num_tutorial : {$sum : 1}}}, {$sort : {num_tutorial : -1}}])

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