Получение первого элемента встроенного массива в mongoDB с использованием драйвера Node JS - PullRequest
1 голос
/ 25 апреля 2020

Допустим, у меня есть следующий документ, хранящийся в коллекции mongoDB 'people':

{ 
      _id: 489324,
     name: "Ryan Jones"
   skills: [ "fishing", "programming" ]
}

Я пытаюсь получить первый навык Райана Джонса в массиве (навыки [0]).

Это похоже на простую операцию, но я не могу сделать это, используя драйвер Node JS. Я могу легко получить только массив умений:

db.collection('people').findOne({ name:"Ryan Jones"},{ projection: { skills:1 }})

... но я не хочу передавать весь массив по проводам. Я просто хочу получить "рыбалку".

Я пробовал использовать slice и arrayElemAt в проекции, но я получаю MongoError. Как я могу добиться этого с помощью драйвера NodeJS? Требуется ли более сложная операция агрегации вместо findOne?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Попробуйте это:

db.collection('people').findOne({
  name: "Ryan Jones"
},
{
  skills: {
    $slice: 1
  }
})

MongoTemplate с .find

1 голос
/ 25 апреля 2020

Вы можете добиться этого с помощью агрегации, с помощью $ arrayElemAt примерно так

db.collection('people').aggregate([
  {
    $match: {
      name: "Ryan Jones"
    }
  },
  {
    $project: {
      name: 1,
      skills: {
        $arrayElemAt: [
          "$skills",
          0
        ]
      },

    }
  }
])

См. Демонстрацию здесь

...