2012-04-03 94 views
1

我不確定「distinct」是否適合這一點。mongodb「distinct」查詢?

我有一個簡單的mongo與「發件人」,「接收器」,「內容」的消息系統。

我收到的問題是在收件箱頁面:例如說我有3封約翰和4封傑克,我想在我的收件箱中只顯示每個人發送的最後一封郵件。

我在網上搜索,我認爲http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Distinct將是正確的事情,但它似乎沒有工作或atlest我無法得到它的工作... .. MEH

+0

你是什麼意思轉換像?像Gmail收件箱? – Baba 2012-04-03 08:30:43

+0

是的,那麼談話部分不是很相關。但是很像gmail,facebook或任何其他消息系統。我真的不希望他們分組,因爲這將是一項艱鉅的工作。我只想讓某人發送的最後一條消息顯示在收件箱頁面中。 – 2012-04-03 09:06:33

回答

3

的Ciao恩里科,

我並沒有真正得到你的問題,所以我會盡力解釋如何不同的工作:

Collection name: foo 

Doc no.1: {'a':1,...} 
Doc no.2: {'a':2,...} 
Doc no.3: {'a':3,...} 

如果然後運行:

db.runCommand({ distinct: 'foo', key: 'a' }) 

什麼你得到的將是:

[1,2,3] 

而且我不認爲這將是任何使用你的。請嘗試按發送日期排序,並將結果限制爲一個:

db.collection.find(<your_filters_here>).sort({<date_sent_key> : -1}).limit(1) 
+0

我不確定這會工作,如果我限制一個結果,它只會給一個結果。這可以工作,如果在我的收件箱中,我只與一個人交談......但也有其他人的消息 – 2012-04-03 09:29:35

+0

哦,我明白了,您需要所有發件人的第一封郵件。那麼這是一個地圖/減少工作。 (您需要將每個消息與關鍵字:發件人進行映射,並將它們縮小以僅取最近的消息)。 – luke14free 2012-04-03 09:40:05

+1

我剛發現一個更簡單的方法!每發送一條新消息,用「isLast:1」標記它,當寫入新消息時,將原來的消息設置爲isLast:0 ...就這麼簡單! – 2012-04-03 09:46:57