我试图让用户向其他用户发送类似于Facebook和其他社交媒体平台的朋友请求。我已经开始创建这个功能,但很快就卡住了,因为我是mongoDB和整个Schema的新手。
以下是我目前的模特:
// User Schema
var UserSchema = new Schema({
_id: {
type: Number
},
name: {
type: String
},
username: {
type: String,
index: true
},
password: {
type: String,
required: true
},
email: {
type: String
},
friends: [{
friendName: {
type: Schema.ObjectId,
required: true,
ref: 'User'
},
duration: {
type: Number
}
}]
});
// Friendship Schema
var FriendshipSchema = new Schema({
participants: [{
type: Schema.Types.ObjectId,
ref: 'User'
}],
requestTo: {
type: Schema.Types.ObjectId,
ref: 'User'
},
accepted: {
type: Boolean,
default: false
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
var Friendship = module.exports = mongoose.model('Friendship', FriendshipSchema);
var User = module.exports = mongoose.model('User', UserSchema);
据我所知。从这里开始,我不知道如何使用这些模式在2个用户之间建立友谊。我的最终目标是在网页上设置一个按钮,向目标收件人发送朋友请求,然后他们可以接受或拒绝该请求。
任何有关这方面的帮助都很棒,因为我不知道从这里开始使用这两个模式做什么。谢谢!
答案 0 :(得分:2)
我们需要只使用一个是userSchema的模式(就像上面的以色列所说,你只需要一个数组/对象来列出你在userSchema上的友谊)。但我们需要添加另一个模式(称为friendRequestSchema)。
FriendRequest架构将是: - ID用户请求(int) - ID用户收件人(int) - status(int)//假设1 =请求,2 =接受,3 =拒绝
控制器应该来自用户A点击"朋友请求"用户B页面上的按钮。
如果运行它的函数将记录在friendRequest DB上,它将记录用户A的ID(作为请求者),用户B的ID和请求状态。
如果请求状态= 1,则将通知用户B并给他两个被接受和拒绝的选项。
如果用户按下按钮接受,则在friendRequest DB中更新的状态为=> 2(已接受)。然后,您必须调用另一个函数将用户ID A添加到用户B的友谊列表。相反。然后,如果您想要发出通知,也可以调用它。
否则用户B将按拒绝(状态将=> 3)然后通知它。
UserSchema
var UserSchema = new Schema({
name: String,
username: {
type: String,
index: true
},
password: {
type: String,
required: true
},
email: String,
friendship: [String] });
然后是FriendRequestschema
var FriendRequestSchema = new Schema({
requester: {
type: int,
required: true
},
recipient: {
type: int,
required: true
},
status:
type: int,
required: true });
这只是为了让你知道,它是如何工作的。关于(sendrequest,block .etc)的更复杂的方法你可以check this link,它是PHP的流程,但你可以轻松地将它移动到你的js。希望它能帮助你。
答案 1 :(得分:1)
您的模型可以改进,您的代码可以清理:
首先,如果您只为该字段提供类型,则不需要括号:
var UserSchema = new Schema({
name: String,
username: {
type: String,
index: true
},
password: {
type: String,
required: true
},
email: String,
friends: [String]
});
这应该是架构的简化版本。不需要指定_id字段,因为mongoose会自动创建它。如果你想在那里放置一个自定义值,只需在插入时执行。
第二
如果您想引用其他用户,为什么不使用包含其他用户ID的简单数组。例如,如果你有用户A,那么"友谊"这个用户的用户ID包含在他的朋友"字段。
{id:12345, username:"A", password:***, email:"a@fakemail.com", friends:[B_id,C_id,D_id]}
在这种情况下,无论何时想要制作A的朋友列表,您都可以在mongodb中执行$lookup
操作,它将为您填写其他用户信息。
我认为我没有涵盖你的所有问题,但我希望我的回答很有帮助。