我正在开发一个应用程序,其中用户users
可以彼此成为friends
。
所以我这样设计Friends
。
const friendsSchema = new Schema({
requester: { type: Schema.Types.ObjectId, ref: 'Users'},
recipient: { type: Schema.Types.ObjectId, ref: 'Users'},
status: {
type: Number,
enums: [
0, //'add friend',
1, //'requested',
2, //'pending',
3, //'friends'
]
}
}, {timestamps: true})
module.exports = mongoose.model('Friends', friendsSchema)
如果userA
向userB
发送请求,则我将执行以下操作:
const docA = await Friend.findOneAndUpdate(
{ requester: UserA, recipient: UserB },
{ $set: { status: 1 }},
{ upsert: true, new: true }
)
const docB = await Friend.findOneAndUpdate(
{ recipient: UserA, requester: UserB },
{ $set: { status: 2 }},
{ upsert: true, new: true }
这意味着,如果userA
向userB
发送请求,则字段模式中现在将有两个新条目。
现在的问题是,假设我想获取用户的所有朋友的列表。然后,如果我在上面的数据库中查询userA
的朋友,那么我将获得两个数据,但与我告诉过的用户相同userA
发送请求后,将完成两个数据输入。如何解决此问题?我只想要一个可以存储用户之间的友谊以及他们之间的状态的架构。我的意思是,请求是待处理的还是被接受的,或者他们现在成为了朋友。请纠正我