Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MongoDB记录可疑流量_Php_Mongodb_Mongodb Php - Fatal编程技术网

Php MongoDB记录可疑流量

Php MongoDB记录可疑流量,php,mongodb,mongodb-php,Php,Mongodb,Mongodb Php,我想保存一个可疑流量的集合,类似于以下模式: "_id": ObjectId(###), "count": NumberInt(6), "ip": NumberInt(2147483647), "requests": { [ "uri": "/path/to/something/", "last": NumberInt(1419023477) "count": NumberInt(2) ], [ "uri": "/path/to/something/else/", "last": N

我想保存一个可疑流量的集合,类似于以下模式:

"_id": ObjectId(###),
"count": NumberInt(6),
"ip": NumberInt(2147483647),
"requests": {
[ "uri": "/path/to/something/",
  "last": NumberInt(1419023477)
  "count": NumberInt(2) ],
[ "uri": "/path/to/something/else/",
  "last": NumberInt(1419023478)
  "count": NumberInt(4) ]
}
有人能帮我做一个简单的插入:

将请求URI添加到嵌入的文档数组中 增加该URI的请求数 设置该URI的最后请求日期 最后增加该IP的总请求计数 有人让我发布到目前为止我得到的信息:

$db->coll->update(array('ip' => $ip),
                array('$addToSet' => array('req' => array('$set' => array('last'  => $timestamp),
                                                          '$inc' => array('count' => 1)))),
                array('upsert' => true)
                );

如您所见,它还没有搜索具有匹配uri$uri的嵌入文档

我将更改您的文档结构。天真地说,一个IP将向不断增长的URI集合发出请求。在MongoDB中,使用无边界增长的阵列不是一个好主意,您会发现处理它们既慢又麻烦。我建议每个文档都基于一个请求,而不是基于IP,因此文档看起来像:

{
    "ip" : "192.168.1.1",
    "uri" : "/food/cookies/chocolatechip",
    "timestamp" : ISODate("2014-12-22T18:44:26.860Z")
}
我把last in作为datetime,这几乎总是MongoDB中datetime的首选。我将其重命名为timestamp,因为将其称为last不再有意义。另外,为什么要将ip存储为一个数字?我不是IP地址规则方面的专家,但我认为这很危险,因为192.168.1.1与19.216.81.1的IP地址不同,但在删除's'时,两者给出的数字相同


现在,您只需插入一个新文档,就可以完成单个upsert的所有目标。您可以使用.count查找计数,使用.sort查找最近的请求,并可以为必要的查询编制索引,以使这些操作更快

你写代码,我们帮你修复。反之亦然。请编辑问题以添加您尝试过的实现。您的文档结构无效。请求是一个对象数组吗?我还没有对你的答案发表评论,wdberkeley。总共有24个固定数量的URI,所以我不担心数组超出范围。但是,正如你所说,如果列表增加,这是一个很好的考虑。IP刚被转换成整数,因为我更喜欢整数: