在我的应用程序中,我有一个名为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": []
}
}
]);
但是那完全是错误的。有人可以帮我吗?
答案 0 :(得分:2)
您可以尝试使用$map,
viewed
和visitorIps
,您的逻辑和代码保持不变viewed
和visitorIps
await User.updateMany({},
[{
$set: {
posts: {
$map: {
input: "$posts",
as: "post",
in: {
$mergeObjects: [
"$$post",
{
"viewed": {
$add: [{ $size: "$$post.visitorIps" }, "$$post.viewed"]
},
"visitorIps": []
}
]
}
}
}
}
}]
)