2011-06-28 10 views
1

これはMongoDBでは現在可能ですが、 クエリの結果セットを、 結果セット内の値の配列でソートできるかどうかを知りたいと思います。これはMySQLの "ORDER BY FIELD" の機能に似ています。このMySQLの機能の簡単な例:ここでは http://pastebin.com/qtL1vKcMMongoDBクエリ:値のリストで並べ替えることができますか?

私は MongoDBのコンソールで達成しようとしているものの同様の例である:http://pastebin.com/LuKqA6b1

私はほとんどの人々が示唆しているものを知っている:でソートしますクライアント のサイド/アプリケーションコード。しかし、私の場合はそれができません。私は 結果セット(すなわち、skip()/ limit()コンボ)を改ページしています。 でソートすると、アプリケーションコードにコレクション全体を選択し、フィルタリングせずに並べ替えてからアプリケーションコードに を適用する必要があります。

skip()/ limit()を適用する前に結果セットをソートする必要があります。

この機能は非常に実用的だと思います。私のケースでは、 機能を MongoDBと統合しようとしていますが、Sphinxのマッチング関連性によるソートを維持しています。 は次のように動作します。

  1. スフィンクスのドキュメントは文字列属性としてMongoIDとともに格納されます。この は、MongoDBドキュメントに直接対応しています。
  2. ユーザテキスト検索が実行されると、まずSphinxがクエリされます。 Sphinxの結果セットの MongoIDは、MongoDB コレクション(つまり、$ in演算子)を照会するために使用されます。
  3. スフィンクスの結果セットによって提供される関連性ソートは失われます。
  4. :(

これを達成するための実用的な方法はありますか?

+0

MongoDBについての書籍やドキュメントは読んでいませんか? –

+0

@ahmet:私はあなたが質問を正しく読まなかったと思います... –

+0

それは可能ではなく、多くの本などで言われています。 –

答えて

1

それは可能ではないですが、私はあなたと推測スフィンクスからページされた結果を返すことができます。$inオペレータを使ってmongodbから適切なデータを読み込み、sphinx idのソートに従ってクライアント側のページング結果を並べ替えます。

Mongodbの皆さんは、実際のフルテキスト検索のサポートについて考えている人がいます(jiraフィーチャーも予定されています)。

+0

これは間違いなく最高の解決策です。 SphinxとMongoDBの文書を常に同期させる必要があります。私は、文書がSphinxに存在するが、MongoDBの冷静さではなく、断片化された結果に陥っている。 –

+0

@TimboWhite:あなたはmongodbとsphinxへのあなたの書き込みは非同期ですか?)あなたはあなたの質問に書いた方法でmongodbとsphinxの統合を計画しているからです) –

+0

私はそれをまだ特定していませんが、おそらくデータをアーカイブするcronジョブです。私の推測では、それはモンゴーから削除されますが、スフィンクスは削除されません。 –

0

これは現在不可能であり、何の簡単な回避策がどちらかありません。

関連する問題