鍍金池/ 問答/數(shù)據(jù)庫(kù)/ mongodb多次查詢,不斷添加條件,如何處理更好

mongodb多次查詢,不斷添加條件,如何處理更好

查詢列表(20萬(wàn)數(shù)據(jù)),先通過條件一查詢,如果查詢出來的數(shù)據(jù)大于一,則添加條件二(查詢條件為條件一加上條件二),如果結(jié)果大于一則繼續(xù)添加條件,如果等于一則終止,如果結(jié)果為0則獲取上一次查詢的結(jié)果;以此類推,添加多個(gè)條件。這樣的情況如何處理更好呢?
現(xiàn)在想到的思路就是保存每次查詢到的結(jié)果,在結(jié)果上查詢,但是如果結(jié)果很大的話,就無法實(shí)現(xiàn)。另外也想過使用聚合但是因?yàn)闂l件判斷感覺無法處理。各位有什么好的方法嗎?

回答
編輯回答
奧特蛋

主要問題是,這個(gè)過程是怎么進(jìn)行的?

場(chǎng)景一

如果條件一多于1條數(shù)據(jù),是由用戶選出第二個(gè)條件再查第二次,然后再查,如果再多于1,用戶再選出第三個(gè)條件再查
如果是這種場(chǎng)景,我覺得這不是一個(gè)數(shù)據(jù)庫(kù)需要解決的問題,而更應(yīng)該是你如何引導(dǎo)用戶操作的問題。簡(jiǎn)單的實(shí)現(xiàn)可以做到:

  • 由AJAX加載查詢結(jié)果,如果后一次查詢結(jié)果是0,則不要更新當(dāng)前頁(yè)面;反之更新頁(yè)面中的結(jié)果。

不用考慮保留上一次的結(jié)果的問題,要保留的只是上一次的條件,保留結(jié)果無論對(duì)數(shù)據(jù)庫(kù)效率還是對(duì)開發(fā)復(fù)雜度都沒有好處。

場(chǎng)景二

如果是用戶一次性給定了有順序的n個(gè)條件,你需要查到多少個(gè)條件時(shí)記錄只剩一條。
如果是這種場(chǎng)景,同樣不用考慮保留中間結(jié)果的問題。可以考慮倒過來查,先使用最多條件,沒有結(jié)果則減一個(gè)條件,一直查到有結(jié)果為止,那就是你要的結(jié)果。

2017年3月19日 00:47