2014-11-09 2 views
0

У меня есть такая схема.Получите часть списка эффективно с Mongoose

peopleSchema = Schema({ 
    followerRefs: { 
     type: [ 
      { type: Schema.Types.ObjectId, ref: 'peoples'} 
     ], 
     select: false 
    }, 
    followRefs: { 
     type: [ 
       { type: Schema.Types.ObjectId, ref: 'peoples'} 
      ], 
      select: false 
     } 
    }); 

Каждый раз, я просто хочу выбрать часть followerRefs или followRefs. Например, я хочу реализовать пейджинг, поэтому я просто хочу выбрать первые 20 в followRefs или первые 21 ~ 40 в followRefs.

Итак, есть ли способ получить часть followerRefs с выбором всего списка?

Похоже, я не ясно объяснил свой вопрос. Я предполагаю, что в базе данных followerRefs есть более миллиона объектов, и я просто хочу получить первые 20 из них, а это значит, что я просто хочу получить индекс 0 ~ 19 из них. Поэтому я не хочу загружать весь миллион объекта в память.

Так что мне интересно, есть ли способ получить первые 20 сущностей без загрузки всех из них?

+0

это отличается от того, что было предложено и ответил здесь: http://stackoverflow.com/questions/5539955/how-to-paginate-with-mongoose-in-node-js –

+0

Немного отличается. В этом вопросе автор хочет найти много разных документов и ограничить количество документов. Но в моем случае я уже получил документ с одним человеком, и я хочу ограничить атрибут списка документа people. Спасибо, в любом случае! –

ответ

0

Если это всего лишь список имен, я не думаю, что вы должны обрабатывать сортировку через мангуст или бэкэнд. Но это зависит от размера данных.

Через javascript (frontend) Сначала я бы отсортировал список в зависимости от какой категории, затем я бы отсортировал его. Сортировка с простым javascript может быть сложной, и я не эксперт в этом, так как я использую плагины. XD

Итак, вот ссылка со ссылкой на ответ о сортировке javascript. Sorting an array of JavaScript objects

Поскольку вы спрашиваете о частях массива, просто используйте функцию javascript slice().

var myList = ["Follower1", "Follower2", "Follower3", ...]; //pretend it goes til 20 
 
var page1 = myList.slice(0, 19);

+0

О, извините, я не ясно объяснил свой вопрос. Я предполагаю, что в followerRefs в базе данных может быть более 1 миллиона объектов. И я не хочу загружать их все в память. Я просто хочу получить первые 20 человек, а это значит, что я хочу получить индекс от 0 до 19, и мне не нужно сортировать список. В любом случае, спасибо! –

Смежные вопросы