我正在使用 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
});
请记住以下几点:
速度必须很快(预计数百万条帖子)
它使用
limit(10)
和skip(int)
进行 API 延迟加载类别和组是随机的,但帖子是按顺序
{created_at: desc}
用户可以关注多个
类别
,并且可以加入多个群组
。
最佳答案
如果我完全理解你的问题(有点不清楚),那么你正在寻找聚合和 $sample运算符(operator)。它从集合中随机选择文档。
关于node.js - 来自填充模型的 Mongoose 随机和混合响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42133579/