Восстановить первые три элемента массива из поиска документов на основе идентификатора

#node.js #mongodb #mongoose #mongodb-query

#node.js #mongodb #мангуст #mongodb-запрос

Вопрос:

У меня есть массив внутри документа, допустим, у пользователя есть followedBy массив, из которого я хочу найти пользователя на основе идентификатора, а затем хочу получить только первые 3 элемента followedBy .

На картинке вы можете видеть, что у меня есть коллекция пользователей, а затем внутри user у меня есть массив с именем as followedBy .

Мне нужно сначала выполнить поиск пользователя на основе идентификатора, а затем получить первые 3 элемента массива в одном запросе, а не сначала получить пользователя и получить followedBy массив, содержащий тысячи элементов внутри него, а затем применить к нему срез.

введите описание изображения здесь

Ответ №1:

Согласно документам, которые вы можете использовать $slice в проекции.

Итак, вам нужно сделать:

 db.collection.find({
  "_id": your_id
},
{
  "followedBy": {
    "$slice": 3
  }
})
 

Проверьте этот пример.

Использование mongoose точно такого же запроса:

 YourModel.find({
    "id": your_id
  },
  {
    "followedBy": {
      "$slice": 3
    }
  })
.then(result => {
  // ...
}).catch(e => {})
 

Комментарии:

1. спасибо, это решило проблему, дайте мне знать, можем ли мы использовать здесь супер-разбивку на страницы, как мы делаем при извлечении нескольких записей, или у нас есть единственный способ применить с помощью slice? хотя slice также может работать. что вы предлагаете?