node.js - 来自填充模型的 Mongoose 随机和混合响应

标签 node.js mongodb mongoose mongoose-schema mongoose-populate

我正在使用 Node js 和 Mongoose 为 MongoDB 构建大型社交网络,需要一些帮助。

我的想法是混合模型的响应,显示用户正在关注的类别中的一篇帖子,然后显示用户也关注的另一个类别中的帖子,然后显示组(私有(private)类别)中的帖子。类似的 3 + 1(3 个类别 + 1 个群组)帖子,但用户可以关注多个类别,并拥有多个群组。

有什么东西可以用来从随机类别+组中获取帖子吗? 我在这里尝试不通过用数学编写随机逻辑来发明轮子

这是我的简化架构:

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. 用户可以关注多个类别,并且可以加入多个群组

最佳答案

如果我完全理解你的问题(有点不清楚),那么你正在寻找聚合和 $sample运算符(operator)。它从集合中随机选择文档。

关于node.js - 来自填充模型的 Mongoose 随机和混合响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42133579/

相关文章:

sql - 在 postgresql 中对一个非常大的表进行分页和过滤(键集分页?)

MongoDB - 清除嵌套数组中的项目

node.js - Mongoose 模式方法返回不是一个函数

javascript - 如果当前测试失败,如何检查mocha(tdd)的拆解方法?

javascript - 使用 node.js 的 YouTube 下载器

python - 使用 Ruby 或 Python 存储大量外部 API 数据的最佳方法

javascript - node.js:从函数返回未按预期运行

node.js - 如何在 Mongoose 的一个查询中获取数据并进行计数

Mongoose :更新json数组中的元素

javascript - 多人游戏 Action 同步