起因
當(dāng)前我們使用mongodb進(jìn)行查詢時,有時我們的條件是分塊生成的,它可能來自一個列表里,我們的條件需要根據(jù)列表去返回?cái)?shù)據(jù),這里有個問題,如果遍歷列表,然后每次都去從mongodb里查詢數(shù)據(jù) ,這種性能顯然是不好的,我們需要把條件進(jìn)行拼接,一次把數(shù)據(jù)查詢出來!
分析
使用criteria這個對象去構(gòu)建查詢條件,使用oroperator來組合多個criteria實(shí)例,最終將列表里所有條件拼接出來,從返回查詢一次即可返回全部數(shù)據(jù) 。
1
|
criteria[] criterias = criterialist.toarray( new criteria[criterialist.size()]); criteria criteria = new criteria(); criteria.oroperator(criterias); query query = query.query(criteria); |
實(shí)現(xiàn)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
private list<x> getclients(list<codeaccountperiod> codeaccountperiods) { list<criteria> criterialist = new arraylist<>(); for (codeaccountperiod codeaccountperiod : codeaccountperiods) { criterialist.add(where( "accountperiod" ).is(codeaccountperiod.getaccountperiod()) .and( "code" ).is(codeaccountperiod.getcode()) ); } criteria[] criterias = criterialist.toarray( new criteria[criterialist.size()]); criteria criteria = new criteria(); criteria.oroperator(criterias); query query = query.query(criteria); list<string> fields = new arraylist<string>( arrays.aslist( "accountperiod" , "code" , "client" , "taxproperty" , "version" )); for (string name : fields) { query.fields().include(name); } list<x> clients = mongotemplate.find(query, x); return clients; |
有時解決問題的方法可以有多種,我們需要從另一個方面去考慮它。
總結(jié)
以上所述是小編給大家介紹的spring boot mogodb多條件拼接的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!
原文鏈接:http://www.cnblogs.com/lori/p/9488979.html