鍍金池/ 問答/數(shù)據(jù)庫/ mongoDB中,如何實(shí)現(xiàn)像我描述那樣的復(fù)雜的查詢?

mongoDB中,如何實(shí)現(xiàn)像我描述那樣的復(fù)雜的查詢?

問題背景描述:
一個(gè)在線考試系統(tǒng),在設(shè)計(jì)存放試題的數(shù)據(jù)庫時(shí),
如果使用一個(gè)collections存放基礎(chǔ)題,中檔題,高難題,
通過設(shè)置每一個(gè)實(shí)例的屬性type:easy 或者 medium 或者 hard 來存放,如下表:

"title" : "下列選項(xiàng)中不屬于javascript基本數(shù)據(jù)類型的選項(xiàng)是?", 
"choose" : "A.boolen B.string C.function ", 
"true" : "C",
"type" : "easy" 

現(xiàn)在我想隨機(jī)查詢20道type:easy的題目,請(qǐng)問該怎么寫查詢語句...
已經(jīng)知道3.2版本新增了隨機(jī)查詢功能

db.questions.aggregate(
   { $sample: { size: 20 } }
)

但是我的試題數(shù)據(jù)庫中,不止存放了簡(jiǎn)單題,還有中檔題和高難題。
請(qǐng)問如何才能從簡(jiǎn)單題中隨機(jī)查詢20道題呢...
還有個(gè)問題,就算3.2版本新增了aggregate操作,但是mongoose貌似沒有
支持這個(gè)操作...那請(qǐng)問如果使用mongoose的話,如何達(dá)到題中的效果呢T.T

回答
編輯回答
孤巷

已經(jīng)解決..
方案一.插入試題時(shí)定義一個(gè)自增索引,然后用random*集合數(shù)據(jù)總條數(shù),用這個(gè)來find,find幾次就是取幾次隨機(jī)數(shù)。
方案二.mongoDB 3.2新增的聚合(aggregate)方法,通過$match(過濾數(shù)據(jù))和$sample(取隨機(jī)數(shù))來達(dá)到效果。

2018年3月15日 05:12