首页 > 解决方案 > 如何在Mongodb中获取过滤后数组的大小

问题描述

db.FlaggedData.aggregate([
{
    "$match": {
        "_id": "d86d6b48-e949-4daa-8364-9ef008416ae8"
    }
},
{
    "$project": {
        "users": {
            "$slice": [
                {
                    "$filter": {
                        "input": "$users",
                        "as": "users",
                        "cond": {
                            "$and": [
                                { SOME FILTERS
                                }
                            ]
                        }
                    } 
                },
                0,
                100
            ]
        },
        "count": {"$size": "$users"}
    }
    
}

])

如何获得过滤结果的大小?

正如我现在正在做的那样,我得到的是数组的大小,而不是过滤结果的大小。

谢谢。

标签: arraysmongodbaggregation-framework

解决方案


  • 你需要把整个$slice计算在内。
db.collection.aggregate([
  {
    "$match": {
      "_id": "d86d6b48-e949-4daa-8364-9ef008416ae8"
    }
  },
  {
    "$project": {
      "users": {
        "$slice": [
          {
            "$filter": {
              "input": "$users",
              "as": "user",
              "cond": {
                "$and": [
                  {
                    $eq: [
                      "$$user.name",
                      "123"
                    ]
                  }
                ]
              }
            }
          },
          0,
          100
        ]
      },
      "count": {
        "$size": {
          "$slice": [
            {
              "$filter": {
                "input": "$users",
                "as": "user",
                "cond": {
                  "$and": [
                    {
                      $eq: [
                        "$$user.name",
                        "123"
                      ]
                    }
                  ]
                }
              }
            },
            0,
            100
          ]
        }
      }
    }
  }
])

mongoplayground

或者

  • 使用两个project
db.collection.aggregate([
  {
    "$match": {
      "_id": "d86d6b48-e949-4daa-8364-9ef008416ae8"
    }
  },
  {
    "$project": {
      "users": {
        "$slice": [
          {
            "$filter": {
              "input": "$users",
              "as": "user",
              "cond": {
                "$and": [
                  {
                    $eq: [
                      "$$user.name",
                      "123"
                    ]
                  }
                ]
              }
            }
          },
          0,
          100
        ]
      }
    }
  },
  {
    "$project": {
      users: {
        "$size": "$users"
      }
    }
  }
])

mongoplayground


推荐阅读