Javascript 数组上的updateMany()
在我的应用程序中,我有一个名为Javascript 数组上的updateMany(),javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,在我的应用程序中,我有一个名为Blog的集合,我每24小时运行一次查询 await Blog.updateMany({}, [ { $set: { viewed: { $add: [{ $size: "$visitorIps" }, "$viewed"] }, visitorIps: [] } } ]); 我的问题是我有第二个集合名为Use
Blog
的集合,我每24小时运行一次查询
await Blog.updateMany({}, [
{
$set: {
viewed: {
$add: [{ $size: "$visitorIps" }, "$viewed"]
},
visitorIps: []
}
}
]);
我的问题是我有第二个集合名为Users
。
在用户内部,我有一个名为posts
的数组,下面是该用户保存的所有帖子
{
_id: 234klj2ö34,
user: "Max",
posts: [
{
_id: 5dgewef323523,
name: "My first blogpost",
content: "...",
viewed: 0,
visitorIps: ["192.168.23.12"]
}
]
}
现在,我需要对每个数组的第二个集合执行相同的查询。我该怎么做?我试过这样的方法,但没有效果:
await User.updateMany({}, [
{
$set: {
"posts.$[].viewed: {
$add: [{ $size: "posts.$[].visitorIps" }, "posts.$[].viewed"]
},
"posts.$[].visitorIps": []
}
}
]);
但这是完全错误的。有人能帮我吗?你可以试试
- 查看的
和访问的
的逻辑和代码保持不变
- 将合并当前光标字段和我们计算的
和已查看
访问者
我怀疑这是可能的。因为,
$add,$size
是与$set aggregate update一起工作的聚合运算符。即使使用$[]
或$[element]
,也不可能将$add、$size、$inc
用于此要求。用$out
写另一个收藏怎么样?@Gibbs我想$out
不是我想要的。是否可以使用聚合对此进行存档?此任务将每24小时执行一次,或每3天或4天执行一次,因此速度无关紧要。您是否确定此任务会起作用<代码>更新操作必须包含原子运算符-是否特定于版本?请尝试在mongo shell中使用,因为有时这在另一个平台中不受支持,shell版本应为4.2。我多次遇到这种不一致的情况,但无法解释为什么在shell上成功,但不是通过3t。然而,这个解决方案看起来很有希望,mei将通过soonamazing检查它,只需复制/粘贴,它就可以毫无问题地工作
await User.updateMany({},
[{
$set: {
posts: {
$map: {
input: "$posts",
as: "post",
in: {
$mergeObjects: [
"$$post",
{
"viewed": {
$add: [{ $size: "$$post.visitorIps" }, "$$post.viewed"]
},
"visitorIps": []
}
]
}
}
}
}
}]
)