考虑具有以下结构的文档的集合webs
[
{
"_id": ObjectId("5631e7f6cc6b441000ad9033"),
"name": "web1",
"pagehits": [
{
"ip": "12.34.56.78",
"hits": [
ISODate("2015-10-28T11:06:37.536+0000"),
ISODate("2015-11-28T11:06:37.536+0000")
]
}
]
}
]
网络(当然)有_id
,name
,(其他未提及的属性)和pagehits
数组。每个数组项对应一个ip。此外,每个网页匹配都会在hits
项的pagehit
子数组中保存为日期。
add pagehit
函数的伪算法因此看起来像
find
网址已提供ObjectId
pagehits
数组元素pagehits
数组,其中ip为当前用户ip,hits
为仅包含当前日期的数组。是否可以通过单个MongoDB调用(insert hit
)实现此findOneAndUpdate
函数?
保证所有网站都存在,因此无需在集合中插入整个文档。
可能发生的两种情况的例子:
案例1)点击IP 192.168.0.1 (尚未列入清单):添加了新的子文档
[
{
"_id": ObjectId("5631e7f6cc6b441000ad9033"),
"name": "web1",
"pagehits": [
{
"ip": "12.34.56.78",
"hits": [
ISODate("2015-10-28T11:06:37.536+0000"),
ISODate("2015-11-28T11:06:37.536+0000")
]
},
{
"ip": "192.168.0.1",
"hits": [
ISODate("2016-04-08T11:25:37.536+0000")
]
}
]
}
]
案例2)点击IP 12.34.56.78 (已在列表中):当前日期被推送到点击数组
[
{
"_id": ObjectId("5631e7f6cc6b441000ad9033"),
"name": "web1",
"pagehits": [
{
"ip": "12.34.56.78",
"hits": [
ISODate("2015-10-28T11:06:37.536+0000"),
ISODate("2015-11-28T11:06:37.536+0000"),
ISODate("2016-04-08T11:25:37.536+0000")
]
}
]
}
]