为了账号安全,请及时绑定邮箱和手机立即绑定

数组上的 updateMany()

数组上的 updateMany()

肥皂起泡泡 2022-12-29 16:37:55
在我的应用程序中,我有一个名为的集合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": []      }    }  ]);但那是完全错误的。有人可以帮我吗?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

您可以尝试使用$map

  • viewed您的逻辑和代码对于and保持不变visitorIps

  • $mergeObjects将合并当前游标字段和viewed我们visitorIps计算的

await User.updateMany({},

    [{

        $set: {

            posts: {

                $map: {

                    input: "$posts",

                    as: "post",

                    in: {

                        $mergeObjects: [

                            "$$post",

                            {

                                "viewed": {

                                    $add: [{ $size: "$$post.visitorIps" }, "$$post.viewed"]

                                },

                                "visitorIps": []

                            }

                        ]

                    }

                }

            }

        }

    }]

)


查看完整回答
反对 回复 2022-12-29
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信