2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
這個(gè)結(jié)構(gòu)不太合理,內(nèi)嵌數(shù)組太多,你提到的查詢是可以搞的,但比較復(fù)雜,得靈活使用$unwind
用nosql,個(gè)人的建議是可以適當(dāng)冗余,然后數(shù)據(jù)結(jié)構(gòu)盡量平坦,這樣查詢效率較高,如果是我設(shè)計(jì),就采用下面很平坦的做法:
{
"userId":FFFFFF
"eventId:FFFFFF_18898981
"messageId":1,
"messageStatus":1,
"outTime":3000
},
雖然冗余了userId和eventId在多條記錄里,但是查詢和索引都很好能,等于以空間換時(shí)間。適合放數(shù)組里面的最好是很簡單的結(jié)構(gòu),諸如標(biāo)簽這種純字符串?dāng)?shù)組

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
依次回答你的問題:
1.結(jié)構(gòu)不合理。我們?cè)贅?gòu)造JSON數(shù)據(jù)的時(shí)候,原則上不要嵌套多層,如果能嵌套多層的數(shù)據(jù)結(jié)構(gòu),其實(shí)是可以對(duì)java bean數(shù)據(jù)結(jié)構(gòu)本身再進(jìn)行抽象的,而且多層嵌套,在fastjson中。阿里巴巴的fastjson是不支持兩層嵌套的,多層嵌套的獲取數(shù)據(jù)要自己寫方法來取值,非常不利于開發(fā)。
2.查詢和刪除都要取值判斷,代碼如下:
定義一個(gè)java bean 屬性:String id, String userId List<Event> events;
Event events = (Event)JSON.toJavaObject(json, Event.class);
然后你依次獲取來比,[]是數(shù)組,里面存多個(gè)對(duì)象.{}中存放的是對(duì)象。
添加回答
舉報(bào)