0

我对如何存储关系有一个想法。每个用户都有一个friends填充了 ID 的数组。但是,我应该如何在 MongoDB 的 Express.js 应用程序中发起好友请求?

我正在考虑创建一个“通知”集合:

_id, userId, type, friendId, read

因此,当被请求的朋友登录时,他们可以看到自己要处理的所有通知...

或者这很荒谬?

4

3 回答 3

1

对于此类通知,我所做的如下:

var notificationSchema = mongoose.Schema({
    to:{
        type: mongoose.Schema.Types.ObjectId, ref: 'User'
    },
    from:{
        type: mongoose.Schema.Types.ObjectId, ref: 'User'
    },
    for: {
        type: String
    },
    status: {
        type: String,
        default: "Not Seen"
    },
    description:{
        type: String
    }
},{ timestamps: { createdAt: 'created_at' }
});

我保存了往返(用户)的_id,我使用for字段作为通知类型,如关注、喜欢等,并将description字段用作可选。

于 2017-12-31T14:41:51.840 回答
0

听起来很合理。但我的方法会有点不同。我会将通知存储在用户数据库本身中。就像是

username
dob
...
notifications[[type: 'friend', read: 0, request_from: '22sd300sdf45003425asz'], ...]
...

这样,您不必在每次页面加载时都进行 db 调用。一旦你初始化一个会话(我使用护照),它就会在那里,已经为模板做好了准备。在用户采取有效行动后,我可以删除它或其他任何东西。

但同样,它取决于需要。做最适合你的事!

于 2013-06-26T08:19:06.970 回答
0

如果您将其存储在用户通行证会话中(前面提到的解决方案),您将无法再收到通知,因为它是标题中的静态信息并且不直接连接到文档存储。

最好的办法是让它拥有自己的商店。

{Id:ObjectId, for_user:String,  sent from:String, status:Boolean}

也许您可以最初将状态设置为 null,然后在用户接受或拒绝时将其设置为 true 或 false。创建用户到用户好友关系后。这或多或少是我要做的事情。

于 2016-03-07T03:06:23.683 回答