猿问

数组上的 updateMany()

在我的应用程序中,我有一个名为的集合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": []

      }

    }

  ]);

但那是完全错误的。有人可以帮我吗?


肥皂起泡泡
浏览 112回答 1
1回答

侃侃无极

您可以尝试使用$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": []                            }                        ]                    }                }            }        }    }])
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答