嗯,这个恐怕做不到,因为我不是用代码方式去执行查询的,我是用sql语句去做的查询
我在详细说一下我们的数据吧
有两个集合来记录消息 messageinfo叫做消息表 其中包含的字段为fromId为发送者id,fromname为发送者名字,msg为聊天信息,toId为接受者id,chatDate为聊天日期,chatTime为聊天时间
另一个集合叫msgreadinfo,叫做阅读信息表,其中包含的字段为fromId为发送者id,toId为接受者id,readDate为阅读日期,readTime为阅读时间
业务是这样的流程
A用户每隔一分钟发送一条消息给B用户,连续发送了三次,那么记录在messageinfo中的信息为:
AId,Aname,hello,Bid,2015-04-24,2015-04-24 10:10:10
AId,Aname,hreo,Bid,2015-04-24,2015-04-24 10:11:10
AId,Aname,i like,Bid,2015-04-24,2015-04-24 10:12:10
在A发送消息的过程中,B用户登录到系统,并在10:11:10时候查看A给他发送的消息,然后立马退出
那么msgreadinfo就记录下B的阅读信息,如下所示
Aid,Bid,2015-04-24,2015-04-24 10:11:10
然后如果B在10:12:00再次登录系统,那么它就能看到A给他发送的未读信息,也就只有最后一条(i like)
那么这样的业务的话,我就是用的左外连接
SELECT m.fromUid, last(m.msg) as msg FROM
messagedb.messageinfo as m left outer join messagedb.msgreadinfo as r
on m.fromId=r.fromId and m.toId=r.toId and m.chatTime
where m.toId="Bid" GROUP BY m.fromUid order by m.chatTime desc
(PS:inner join效率貌似快递一点,但是这不能达到业务要求,比如在A退出的那段时间里,C用户又给B发送了消息,那么下次B登录时,也能查看C用户给他发送的消息)
像这样的业务,用sdb是否合理?或则是否有什么优化的方案?具体该怎么做?