2017-02-09 24 views
1

Нужна помощь с большой социальной сетью, которую я создаю, используя Node js и Mongoose для моего MongoDB.Mongoose random и реакция смешивания от заселенной модели

Моя идея - смешать отклик от модели, чтобы показать одно сообщение из категории, в которой пользователь следует, а затем показать сообщение из другой категории, в которой пользователь также следит, затем отобразить его из группы (приватная категория). Аналогично 3 + 1 (3 категории + 1 группа), но пользователь может следить за многими категориями и иметь много групп.

Есть ли что-то, что я могу использовать для получения сообщений от RANDOM категорий + групп? Я пытаюсь здесь не изобретать колесо, написав случайную логику Math

Так что это моя упрощенная схема:

var userSchema = new Schema({ 
    groups: [{type: Schema.Types.ObjectId, ref: 'Group'}], 
    followingCategories: [{type: Schema.Types.ObjectId, ref: 'Category'}] 
}); 

var postSchema = new Schema({ 
    user: {type: Schema.Types.ObjectId, ref: 'User'}, 
    category: {type: Schema.Types.ObjectId, ref: 'Category'} 
}); 

var categorySchema = new Schema({ 
    user: {type: Schema.Types.ObjectId, ref: 'User'}, 
    group: {type: Schema.Types.ObjectId, ref: 'Group'}, 
    posts: [{type: Schema.Types.ObjectId, ref: 'Post'}] 
}); 

var groupSchema = new Schema({ 
    users: [{type: Schema.Types.ObjectId, ref: 'User'}], 
    categories: [{type: Schema.Types.ObjectId, ref: 'category'}] 
}); 

И она должна быть полезной через модель пользователя как:

User.findById(..., function(err, user){ 
    //logic that gets user posts from random categories and groups 
}); 

Принимая во внимание следующее:

  1. Оно должно быть быстрым (ожидая миллионов отправлять)

  2. Он использует limit(10) и skip(int) для API ленивой нагрузки

  3. Категории и группы являются случайными, но сообщения в порядке {created_at: desc}

  4. Пользователь может следовать за многими categories и может быть во многих groups.

+1

уточните, в чем ваш вопрос? –

+1

@DianaHolland Расширенная случайная функция для нескольких держателей отношений - это то, что он ищет, если я хорошо понял –

+0

@MladenJanjetovic Почему вы удалили код из OP в своем первом редактировании? Код может быть релевантен для некоторых других людей ... –

ответ

0

Если я полностью понял ваш вопрос, который немного неясно, что вы ищете агрегации и $sample оператора. Он случайным образом выбирает коллекцию документов.

+0

Можете ли вы дать мне пример, как вы это сделаете с помощью $ sample, потому что у меня нет идеи ... Как @MladenJanjetovic сказать: я думаю, что этот вопрос на самом деле «Как я могу получить все сообщения из групп, которые я следую, категорий и последующих пользователей? " – maki10