Javascript 根据阵列长度增加计数器
我有以下问题: 我想跟踪我博客帖子的访问量,因此我想创建一个名为Javascript 根据阵列长度增加计数器,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有以下问题: 我想跟踪我博客帖子的访问量,因此我想创建一个名为visitorsIp的数组,并使用$addToSet将访问者的ip地址推送到数组中 现在我有了一个cronjob,它应该根据数组的长度增加已查看的计数器。最后应该清除数组 我的文件简化了: { _ip: 5aösldkf3sdlfk2, viewed: 0, visitorsIp: ["192.168.200.20", "192.168.200.21", "192.
visitorsIp
的数组,并使用$addToSet
将访问者的ip地址推送到数组中
现在我有了一个cronjob,它应该根据数组的长度增加已查看的
计数器。最后应该清除数组
我的文件简化了:
{
_ip: 5aösldkf3sdlfk2,
viewed: 0,
visitorsIp: ["192.168.200.20", "192.168.200.21", "192.168.200.22"]
}
我在这里试过这样的方法:
await Blog.aggregate([
{
$addFields: {
counter: {
$size: "$this.visitorsIp"
}
}
},
{
viewed: {
$add: ["$this.counter"]
}
},
{
visitorsIp: {
$set: []
}
}
]);
})
{
_ip: 5aösldkf3sdlfk2,
viewed: 3,
visitorsIp: []
}
似乎没有达到我的预期
我的预期结果如下:
await Blog.aggregate([
{
$addFields: {
counter: {
$size: "$this.visitorsIp"
}
}
},
{
viewed: {
$add: ["$this.counter"]
}
},
{
visitorsIp: {
$set: []
}
}
]);
})
{
_ip: 5aösldkf3sdlfk2,
viewed: 3,
visitorsIp: []
}
查看的增加了3,因为数组大小为3。并在之后清除阵列。以进行更新
db.getCollection('test').update(
{},
[{
$set: {
"viewed": {$add: [ {$size:"$visitorsIp"}, '$viewed' ]},
"visitorsIp": []
}
}],
{
multi: true
}
);
查看的不是有效的管道
要unset
visitorsIp,您需要另一个查询来设置为空或unsetvisitorsIp
。在单个查询中,不能在同一字段上引用这两个字段。要更新
db.getCollection('test').update(
{},
[{
$set: {
"viewed": {$add: [ {$size:"$visitorsIp"}, '$viewed' ]},
"visitorsIp": []
}
}],
{
multi: true
}
);
查看的不是有效的管道
要unset
visitorsIp,您需要另一个查询来设置为空或unsetvisitorsIp
。在单个查询中,不能在同一字段上引用这两个字段。您可以将updateMany()
与管道一起使用
$add
对现有计数+总计访问者SIP的$size
求和
visitorsIp
设置为空[]
- 需要为多个文档更新设置选项
multi:true
注意:使用updateMany()而不是update(),因为在mongoose中update()方法已被弃用
您可以将updateMany()
与管道一起使用
$add
对现有计数+总计访问者SIP的$size
求和
visitorsIp
设置为空[]
- 需要为多个文档更新设置选项
multi:true
注意:使用updateMany()而不是update(),因为在mongoose中update()方法已被弃用
你能添加你的预期结果吗?@turivishal肯定我添加了它。你能添加你的预期结果吗?@turivishal肯定我添加了它。对不起,我误读了你的问题,更新了答案。几乎成功了。问题是我想增加查看的
,而不是设置一个值$inc
在聚合中不起作用?您的第二个解决方案完全删除了我的数组,而不是将其设置为[]
这会导致的错误参数$size必须是数组
是,这就是我需要帮助的地方at@Gibbs尼斯刚刚忘记添加visitorsIp:[]
和multi:true
,因为这将更新单个文档。对不起,我误读了你的问题,更新了答案。几乎有效。问题是我想增加查看的
,而不是设置一个值$inc
在聚合中不起作用?您的第二个解决方案完全删除了我的数组,而不是将其设置为[]
这会导致的错误参数$size必须是数组
是,这就是我需要帮助的地方at@Gibbs尼斯刚刚忘记添加visitorsIp:[]
和multi:true
,因为这将更新单个文档。这实际上不起作用,因为您将查看的
设置为数组大小,而不是递增查看的
这实际上不起作用,因为您将查看的
设置为数组大小,而不是递增查看的