将数组转换为$ project中的字符串(聚合)

时间:2019-06-30 13:12:26

标签: node.js mongodb mongoose aggregation-framework

我使用$ project操作指定要包含的字段,我有以下代码:

[{
    '$lookup': {
        'from': 'users',
        'localField': 'owner',
        'foreignField': 'id'
        'as': 'user'
    }
}, {
    '$project': {
        'userName': '$user.username',
        'userId': '$user.id'
    }
}]

我的结果如下:

[
    {
        "userName": [
            "jscode"
        ],
        "userId": [
            "5d1888d60c627764aabd8b1e"
        ]
    }
]

我需要将 userId userName 结果从 array 转换为 string ,如下所示:

[
    {
        "userName": "jscode" ,
        "userId": "5d1888d60c627764aabd8b1e"
    }
]

谢谢:)

1 个答案:

答案 0 :(得分:3)

您可以在$project以下阶段使用

{
  "$project": {
    "userName": { "$arrayElemAt": ["$user.username", 0] },
    "userId": { "$arrayElemAt": ["$user.id", 0] }
  }
}

或使用$unwind

[
  { "$lookup": {
    "from": "users",
    "localField": "owner",
    "foreignField": "id",
    "as": "user"
  }},
  { "$unwind": "$user" },
  { "$project": {
    "userName": "$user.username",
    "userId": "$user.id"
  }}
]

实际上$lookup总是以数组形式返回新字段。因此,要从该数组中选择字段,您需要使用$unwind或可以$arrayElemAt来选择第0个元素。