【问题标题】:filter array and return specific property过滤数组并返回特定属性
【发布时间】:2016-06-01 23:33:35
【问题描述】:

我有以下预测:

db.tickets.aggregate([
{
  $match: {
    "satisfaction_rating.id": {"$exists": true}
  }
},
{
  $project: {
    "ticketId": "$id",
    "employee": "$assignee.name",
    "subject": "$subject",
    "memberId": {
      "$filter": {
         "input": "$custom_fields",
         "as": "field",
         "cond": {"$eq": ["$$field.id", 24685851]}
       }
    },
    "requester": "$requester.name",
    "created": "$created_at",
    "solved": "$metric_set.solved_at",
    "resolutionTimeInHours": {"$trunc": {"$divide": ["$metric_set.full_resolution_time_in_minutes.business", 60]}},
    "score": "$satisfaction_rating.score",
    "comment": "$satisfaction_rating.comment"
  }
},
{
  $out: "satisfaction"
}]);

$filter 返回一个数组。我想要做的是获取第一个元素并获取一个属性,然后该属性应绑定到 memberId 而不是具有一个元素的数组。

我环顾四周,但没有找到合适的解决方案。 谁能给个提示?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    @user3100115 引导我走向正确的方向。

    这是我的最终解决方案:

    "memberId": {
      "$let": {
          "vars": {
                 "memberId": {
                    "$arrayElemAt": [
                    {"$filter": {
                            "input": "$custom_fields",
                            "as": "field",
                            "cond": {"$eq": ["$$field.id", 24685851]}
                    }}
                    ,0]
                    }   
            },
            "in": "$$memberId.value"
        }
    }
    

    【讨论】:

    • 这对我有帮助。我的问题是我试图使用$this,它可能只适用于this,无论如何它适用于$$field
    【解决方案2】:

    您可以使用$arrayElemAt 运算符从$filter 的结果中返回元素,并使用$let 运算符和dot notation 访问子文档字段。

    "memberId": {
        "$let": {
            "vars": { 
                "field": { 
                    "$arrayElemAt": [
                        "$filter": {
                            "input": "$custom_fields",
                            "as": "field",
                            "cond": { "$eq": [ "$$field.id", 24685851 ]}
                        },
                        0
                    ]
                }
            },
            "in": "$$field.id"
        }
    }
    

    【讨论】:

    • 更进一步。但是我怎样才能获得第一个元素的属性而不是元素本身。
    • 您只需要id 字段吗?
    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2022-01-01
    • 2016-06-11
    相关资源
    最近更新 更多