0

我将在 mongodb 中创建一个收件箱结构。对于多用户消息,我在收件箱架构上遇到了一些问题。我想创建这样的东西,其中收件人包含对象。每个对象都包含 userId 和一个日志,以了解消息是否为红色。如果它是一个正确的(有效的!!)结构,用户 456 怎么知道他是否有一些消息要阅读?

{   
    userId: "123"
    ,recipients: [ {userId:123, read:true}
                  ,{userId:456, read:false}
                  ,{userId:789, read:false} ]
    ,text: "message wrote by user 123"
}
,{  
    userId: "456"
    ,recipients: [ {userId:123, read:false}
                  ,{userId:456, read:true}
                  ,{userId:789, read:false} ]
    ,text: "message wrote by user 456"
}
4

1 回答 1

1

CC如果orTo列表(我假设由receipients列表表示)不会失控并不受约束,则此结构可以工作。

要回答您最初的问题,您可以使用 $elemMatch:

db.inbox.find({receipients:{$elemMatch:{userId:456,read:false}}})

这应该是一个有效的查询,并将返回用户456尚未阅读的所有消息。

于 2013-07-15T10:38:33.490 回答