2011-06-28 33 views
1

我懷疑這是目前MongoDB可能的,但我想知道是否可以通過該 結果集中的值數組對 結果集進行排序。這將類似於MySQL的「ORDER BY FIELD」功能。這MySQL的功能,一個簡單的例子: http://pastebin.com/qtL1vKcMMongoDB查詢:是否可以按值列表排序?

這裏是我想要的 MongoDB的控制檯來完成類似的例子:http://pastebin.com/LuKqA6b1

我知道大多數人會建議:做分揀客戶端 側/應用程序代碼。但是,在我的情況下,這是不可行的。我是 分頁結果集(即。skip()/ limit()組合)。排序在 應用程序代碼將需要選擇整個集合 到我的應用程序代碼,未經過濾,排序,然後應用 分頁。

我需要在應用skip()/ limit()之前對結果集進行排序。

我覺得這個功能會非常實用。在我的情況下, 我試圖將Sphinx text search功能與 MongoDB集成,同時通過匹配相關性維護Sphinx的排序。它 這樣的工作:

  1. 獅身人面像文檔存儲與一個MongoID作爲一個字符串屬性。這個 直接對應於一個MongoDB文檔。
  2. 執行用戶文本搜索時,首先查詢Sphinx。然後使用Sphinx結果集中的 MongoID查詢MongoDB 集合(即$ in運算符)。
  3. 由Sphinx結果集提供的相關性排序丟失。
  4. :(

有沒有做到這一點任何實際的方法?

+0

你還沒有讀過關於MongoDB的書籍和文檔嗎? –

+0

@ahmet:我想你還沒有正確地讀過問題...... –

+0

我的意思是這是不可能的,這是說在很多書籍等 –

回答

1

這是不可能的,但我猜你可以從sphinx返回分頁結果,使用$in運算符從mongodb加載合適的數據,然後根據sphinx id的排序對客戶端分頁的結果進行排序。似乎這應該適用於您。

Mongodb傢伙肯定會考慮'真正的'全文搜索支持(甚至有計劃jira功能),我想很快(可能在今年)。

+0

這絕對是最好的解決方案。儘管必須始終將Sphinx和MongoDB中的文檔完全同步。當文檔存在於獅身人面像但不在MongoDB coollection中時,我遇到了分散的結果。 –

+0

@TimboWhite:所以你寫的mongodb和獅身人面像走向異步?我只是想知道,因爲我也是你在你的問題中描述的方式規劃MongoDB的獅身人面像和整合;) –

+0

我還沒有精確定位它,但它可能是一些的cronjob該檔案數據。我的猜測是它正在從蒙戈刪除,但不是獅身人面像。 –

0

這是目前不可能的,也沒有簡單的解決辦法要麼。