2011-08-09 14 views
2

私はフィッシュを表すドキュメントのMongoDBコレクションを持っています。 私のアプリケーションのユーザーは、fishコレクションのクエリを作成することによってのタイプの魚を定義することができます。(複雑な)MongoDBクエリをMongoDBに保存する

{'length':{$gte : 45}, 'name' : {$in : ['Klaus', 'Alistair', 'Steve']}} 

しかし、新しい:このクエリは、によって返されたすべての魚をするなど

たとえば、ユーザーが 「非常に異常なサメに似た魚」を定義することができ、Conditional Operators を使用して、非常に複雑になることがあります魚は頻繁に発見されているので、ユーザーが作成したクエリに基づいて型を割り当てる必要があります。つまり、今後このクエリを何度も使用する必要があります。したがって、私の考えは次のような文書を持つコレクションを持つことです:

{'typename' : 'highly abnormal shark-like fish', 
'query' : '{'length':{$gte : 45}, 'name' : {$in : ['Klaus', 'Alistair', 'Steve']}}'} 

私の質問は文字列としてクエリを保存する必要がありますか?それが最善の方法ですか?

新しい魚が発見されたら、私は PHPのドライバを使用してクエリを適用する必要がありますことに注意してください。クエリのPHP配列バージョンを文字列として保存し、eval()を使用する必要がありますか?

答えて

1

ユーザーが入力文字列としてクエリを作成する場合は、必ずそれを格納します。後で編集できるようにします。しかし、あなたはすでにevalをしていますか?

それ以外の場合は、クエリドキュメントをシリアル化して保存します。

+0

ユーザーはフォームでクエリを作成します。彼らは裏で何が起こっているのか分からない。フォーム入力からクエリをビルドするので、現在、私はeval()を現在行っていません。 – Dan

+0

'eval'のために' array( '、これは直列化された値と同じように見えるので、後者を使用してください) –

+0

感謝!私はserializeについて知りませんでした。 – Dan