带快递和朋友的朋友请求系统MongoDB的

时间:2017-04-20 01:57:51

标签: node.js mongodb express schema

我试图让用户向其他用户发送类似于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个用户之间建立友谊。我的最终目标是在网页上设置一个按钮,向目标收件人发送朋友请求,然后他们可以接受或拒绝该请求。

任何有关这方面的帮助都很棒,因为我不知道从这里开始使用这两个模式做什么。谢谢!

2 个答案:

答案 0 :(得分:2)

我们需要只使用一个是userSchema的模式(就像上面的以色列所说,你只需要一个数组/对象来列出你在userSchema上的友谊)。但我们需要添加另一个模式(称为friendRequestSchema)。

FriendRequest架构将是: - ID用户请求(int) - ID用户收件人(int) - status(int)//假设1 =请求,2 =接受,3 =拒绝

控制器应该来自用户A点击"朋友请求"用户B页面上的按钮。

  1. 朋友请求按钮将调用一个函数让它说出来" sendFriendRequest()"
  2. 如果运行它的函数将记录在friendRequest DB上,它将记录用户A的ID(作为请求者),用户B的ID和请求状态。

    如果请求状态= 1,则将通知用户B并给他两个被接受和拒绝的选项。

    1. 用户B接受或拒绝
    2. 如果用户按下按钮接受,则在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操作,它将为您填写其他用户信息。

我认为我没有涵盖你的所有问题,但我希望我的回答很有帮助。