【发布时间】:2015-06-27 23:05:09
【问题描述】:
我有一个架构设计问题。我有一个 UserSchema 和一个 PostSchema。
var User = new Schema({
name: String
});
var Post = new Schema({
user: { type: Schema.Types.ObjectId }
});
此外,用户可以关注其他用户。帖子可以被其他用户点赞。 我想查询User的followers和User的following,有限制、跳过、排序等猫鼬功能。我也想查询用户喜欢的Post。
基本上,我解决这个问题的唯一尝试是在每个模式中保持双重引用。架构变成了
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) { ... });
除了像这样进行双重引用之外,还有其他看起来容易出错的方法吗?
【问题讨论】: