我有一个架构设计问题。我有一个UserSchema和一个PostSchema。
var User = new Schema({
name: String
});
var Post = new Schema({
user: { type: Schema.Types.ObjectId }
});
此外,用户可以关注其他用户。帖子可以被其他用户点赞。我想使用Mongoose的功能(例如limit、skip、sort等)查询用户的关注者和用户正在关注的人。我还想查询用户喜欢的帖子。
基本上,我解决这个问题的唯一尝试是在每个模式中保留双重引用。模式变成了:
var User = new Schema({
name: String,
followers: [{ type: Schema.Types.ObjectId, ref: "User" }],
following: [{ type: Schema.Types.ObjectId, ref: "User" }]
});
var Post = new Schema({
creator: { type: Schema.Types.ObjectId, ref: "User" },
userLikes: [{ type: Schema.Types.ObjectId, ref: "User" }]
});
因此,将用于查询的代码如下:
// Find posts that I create
Post.find({creator: myId}, function(err, post) { ... });
// Find posts that I like
Post.find({userLikes: myId}, function(err, post) { ... });
// Find users that I follow
User.find({followers: myId}, function(err, user) { ... });
// Find users that follow me
User.find({following: myId}, function(err, user) { ... });
有没有其他方法可以避免这种容易出错的双重引用方式?
.populate()
有skip
和limit
选项,您可以使用它们来实现分页。我会更新我的答案。 - JME