如果我理解正确,您想跟踪消息的状态。一条消息由一个人发送,但可以被许多人接收。消息的状态取决于我们正在谈论的收件人 - 乔可能已经阅读了蒂姆发来的消息,而莎莉在她的收件箱中有它但还没有阅读它,而琼还没有收到它。根据您的粗略要求,我将使用一个message_status
集合对此进行建模,其中每个文档代表一条消息相对于一个收件人的状态:
{
"message_id" : ObjectId(...) // some unique identifier or reference for the message
"sender" : { "name" : "Tim", "ref" : ObjectId(...) }
"recipient" : { "name" : "Sally", "ref" : ObjectId(...) }
"status" : { "delivered" : true, "read" : false }
}
我不清楚我需要在多大程度上使用引用而不是仅仅嵌入名称,因为没有指定您的完整用例。获取您提到的各种信息非常容易:
发给特定人员的所有消息
db.message_status.find({ "recipient" : ObjectId(...) })
所有未读消息[发送给特定的人?]
db.message_status.find({ "recipient" : ObjectId(...), "status.read" : false })
所有未发送的消息[发送给特定的人?]
db.message_status.find({ "recipient" : ObjectId(...), "status.delivered" : false })
重建发送的消息列表和状态
db.message_status.find({ "sender" : ObjectId(...) })