2011-08-09 102 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