首页 > 解决方案 > mongodb C# 使用查找和方面进行计数

问题描述

我有这个代码:

var pipeline = new BsonDocument[]
            {
            new BsonDocument("$lookup",
            new BsonDocument
                {
                    { "from", "comments" },
                    { "let",
            new BsonDocument("id", "$_id") },
                { "pipeline",
            new BsonArray
                    {
                        new BsonDocument("$match",
                        new BsonDocument("$expr",
                        new BsonDocument("$eq",
                        new BsonArray
                                    {
                                        "$postId",
                                        "$$id"
                                    }))),
                        new BsonDocument("$sort", new BsonDocument("time", -1)),
                        new BsonDocument("$limit", Filters.defaultCommentsLimitPerPost),
                    }
                },
                    { "as", "comments" }
                }),
            new BsonDocument("$limit", 3),
            new BsonDocument("$skip", page - 1),
            };

var pipeline = PipelineDefinition<Post, Post>.Create(Filters.GetJoinComments(page));
                var result = await collectionPosts.Aggregate(pipeline).ToListAsync();
            

我怎样才能得到所有文档的总数,忽略 $limit 和 $skip?

邮寄文件的示例:

{"_id":null,"time":{"$numberLong":"637396703347196085"},"text":"some text","totalCommentsCount":{"$numberInt":"0"},"likes":{"$numberInt":"0"},"category":{"$numberInt":"0"},"videoUrl":null}

评论文档的示例:

{"_id":{"$oid":"5f9dbaf79d10c42f64f46f53"},"text":"a comment","time":{"$numberLong":"637397765330317024"},"likes":{"$numberInt":"0"},"postId":{"$oid":"5f9089dd818de4309403d21b"}}

标签: c#mongodbcount

解决方案


非常感谢您尝试的查询。

我还添加了

  • $sort通过_id osrt。如果不需要,请删除排序
  • $group将所有文档分组到data(因为_id:null)。同时我们得到总数。
  • $unwind解构data数组
  • 我觉得你用这个来分页,对吧?如果是这样,您需要保留$sort并且首先应该是$skip,以下应该是$limit我提到的

和工作查询。

db.post.aggregate([
  {
    $lookup: {
      from: "comment",
      let: {
        "pId": "$_id"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                "$postId",
                "$$pId"
              ]
            }
          }
        }
      ],
      as: "comments"
    }
  },
  {
    $sort: { _id: 1 }
  },
  {
    $group: {
      _id: null,
      data: { $push: "$$ROOT" },
      totalRecords: { $sum: 1 }
    }
  },
  { $unwind: "$data" },
  { $skip: 1 },
  { $limit: 1 }
])

工作Mongo游乐场


推荐阅读