2011-08-09 106 views
2

我有一個MongoDB文檔集合,每個文檔代表一個。 然後,我的應用程序的用戶可以通過創建對魚集合的查詢來定義類型的魚。此查詢可以是非常複雜的,使用Conditional Operators在MongoDB中存儲(複雜)MongoDB查詢

例如,用戶可以定義 「非常不正常的鯊魚般的魚」 是通過返回的魚:

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

但新魚經常被發現,我需要根據用戶創建的查詢來爲它們分配類型。也就是說,我將來需要多次使用此查詢。因此,我的想法是有這樣的文檔集合:

{'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