如何查询以获取用户使用 mongoose 发布的帖子数?

How do I query to fetch number of Posts made by a User using mongoose?

所以我正在尝试获取特定用户完成的 post 的总数。

型号

Post.ts(在 post 模型中我有用户参考)

user: {
      type: Schema.Types.ObjectId,
      ref: "User",
      required: [true, "Please provide user ID."],
    },

我试过了

const posts = await Post.find({ user: req.user._id});
const postCount = posts.length;

但我想聚合用户,这样我就可以 获取用户数据以及 post 计数 。 我试过的是下面,但我得到 0 个 posts.

const user = await User.aggregate([
      {
        $lookup: {
          from: "post",
          let: { userId: "$_id" },
          pipeline: [{ $match: { $expr: { $eq: ["$$userId", "$userId"] } } }],
          as: "posts_count",
        },
      },
      { $addFields: { posts_count: { $size: "$posts_count" } } },
    ]);

我搜索了但没有找到任何相关答案。

您可以按如下方式稍微更改查询。从 post 模型中,我看到为用户集合引用的字段是 user。总的来说,你已经使用了 $userId.

const user = await User.aggregate([
      {
        $lookup: {
          from: "post",
          let: { userId: "$_id" },
          pipeline: [{ $match: { $expr: { $eq: ["$$userId", "$user"] } } }],
          as: "posts_count",
        },
      },
      { $addFields: { posts_count: { $size: "$posts_count" } } },
    ]);

如果这有帮助,请告诉我。谢谢