Получить только необходимый элемент из массива объектов в коллекции MongoDB

Я впервые работаю с MongoDB. Я хочу получить конкретное поле из массива объектов в коллекции MongoDB. Мне нужна помощь, как это сделать?

В моей базе данных есть структура, называемая навыками, которая представлена ​​в виде массива. Я хочу получить как Название навыка, так и опыт по отдельности.

{
"skills" : [
        {
            "skillName" : "sql",
            "experienceInMonths" : 2
        },
        {
            "skillName" : "java",
            "experienceInMonths" : 3
        }
    ]
}

Я попытался получить конкретное поле с помощью $ elemMatch.

Но я не получаю ожидаемого результата.

> db.userforms.find({"emailId": "[email protected]"},{"_id":0, "skills":1})
{ "skills" : [ { "skillName" : "sql", "experienceInMonths" : 2 }, { "skillName" : "java", "experienceInMonths" : 3 } ] }

> db.userforms.find({"emailId":"[email protected]"},{"_id":0, "skills":{$elemMatch: {"skillName":"sql"}}})
{ "skills" : [ { "skillName" : "sql", "experienceInMonths" : 2 } ] }

Мой фактический результат: {"навыки": [{"skillName": "sql", "experienceInMonths": 2}]}

Но требуемый результат: {"skillName": ["sql", "java"]}

попробуйте этот { $project: { skillName: "$skills.skillName" } }

Ashh 09.01.2019 18:22
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
2
1
30
1

Ответы 1

Использовать агрегацию:

db.userforms.aggregate([
  { $match: { emailId: "[email protected]" } },
  { $project: { skillName: { $concatArrays: "$skills.skillName" } } }
])

вернусь:

{ "_id" : 0, "skillName" : [ "sql", "java" ] }

Долли хочет «имя навыка», а не «навыки»;)

Pynchia 09.01.2019 13:55

"skillName" будет. Я неправильно написал возврат. (отредактировано)

Ionut Achim 09.01.2019 14:41

Вы запрашиваете userforms? Я написал db.users в первый раз, но потом отредактировал. Должно сработать, я проверил.

Ionut Achim 10.01.2019 08:52

Другие вопросы по теме