Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb收件箱结构多地址_Mongodb_Data Structures_Mongoose_Database - Fatal编程技术网

mongodb收件箱结构多地址

mongodb收件箱结构多地址,mongodb,data-structures,mongoose,database,Mongodb,Data Structures,Mongoose,Database,我将在mongodb中创建一个收件箱结构。我在多用户邮件的收件箱模式上遇到一些问题。 我想创建这样的东西,其中收件人包含对象。每个对象都包含userId和一个日志,以了解消息是否为红色。 如果它是一个正确的(有效的!!)结构,用户456如何知道他是否有一些消息要读 { userId: "123" ,recipients: [ {userId:123, read:true} ,{userId:456, read:false}

我将在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"
}

如果
CC
To
列表(我假设由
接收者
列表表示)不失控且不受约束,则此结构可以工作

要回答初始问题,可以使用$elemMatch:

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

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

更多信息:在本例中,用户123编写了第一条消息,而用户456和789没有阅读。之后,用户456向相同的用户(123和789)发送了一条新消息,而用户123和789没有阅读。是的,收件人是抄送列表。我可以改变它的名字。谢谢你,伙计