1.以下Mongodb结构是否合理?
注: 其中messageId是另一个消息集合的_id,数值请无视
2.如何查询出userId:FFFFFF,eventId:FFFFFF_18898981,messageStatus:1的messageId
3.如何删除userId:FFFFFF,eventId:FFFFFF_18898981下所有messageStatus:1的消息
mongodb 结构如下:
{
"_id": 略,
"userId":FFFFFF,
"events":[
{
"eventId":"FFFFFF_18898981"
"messages":[
{
"messageId":1,
"messageStatus":1,
"outTime":3000
},
{
"messageId":2,
"messageStatus":0,
"outTime":3000
}
{
"messageId":3,
"messageStatus":1,
"outTime":3000
}
]
}
{
"eventId":"FFFFFF_28898981"
"messages":[
{
"messageId":1,
"messageStatus":1,
"outTime":3000
},
{
"messageId":2,
"messageStatus":0,
"outTime":3000
}
{
"messageId":3,
"messageStatus":1,
"outTime":3000
}
]
}
]
}
这个结构不太合理,内嵌数组太多,你提到的查询是可以搞的,但比较复杂,得灵活使用$unwind
用nosql,个人的建议是可以适当冗余,然后数据结构尽量平坦,这样查询效率较高,如果是我设计,就采用下面很平坦的做法:
虽然冗余了userId和eventId在多条记录里,但是查询和索引都很好能,等于以空间换时间。适合放数组里面的最好是很简单的结构,诸如标签这种纯字符串数组