преобразовать массив в строку в $ project (агрегат) - PullRequest
3 голосов
/ 30 июня 2019

я использую операцию $ project, чтобы указать включение полей, у меня есть этот код:

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

У меня есть результат ниже:

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

мне нужно преобразовать userId и userName результаты от массив до строка примерно так:

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

спасибо:)

1 Ответ

3 голосов
/ 30 июня 2019

Вы можете использовать ниже $project stage

{
  "$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-й элемент.

...