但是,您的问题中缺少很多东西:
我要做的是列出给定区域的果树,并且我还想列出可以在某个区域种植的果树。
闻起来像地理空间查询:http ://docs.mongodb.org/manual/core/geospatial-indexes/ 。
所以用户会有一个位置:
{
name: 'sammaye',
location: [107,206]
}
每棵正在生长的树都可以利用一系列区域:
{
name: 'apple tree'
locations_of_growth: [[74,59],[67,-45]]
}
您只需$near
对用户进行与地球距离(http://docs.mongodb.org/manual/core/geospatial-indexes/#distance-calculation)相当的查询,即可计算出该用户附近存在哪些树木。
关于地理空间查询的问题是它们也可以通过进一步的信息来限制,所以假设你想让用户比较他们在该地区苹果树的叶子颜色,以找出该地区有多少苹果树有绿叶您可以简单地将其添加为树文档中的条件,并将其添加到您的$near
.
地理空间查询有一个缺点,每个集合只能有一个索引(http://docs.mongodb.org/manual/core/geospatial-indexes/#create-a-geospatial-index)所以这个意味着如果您还希望提供可以在该区域种植的树木的列表,那么您可能需要两个集合,一个称为other_trees
,一个称为growable_species
。当您希望允许用户将他们的树与您查询的区域中的其他树进行比较other_trees
时,并且当您希望允许用户查看您可以查询的区域中可以种植哪些树时growable_trees
。
这当然只是这样做的一种方式。
编辑
我不会“推荐”使用 Doctrine,这取决于您,这取决于您的情况。Doctrine 是一个非常沉重且速度惊人的 ORM,并且有很多更快、更轻量级的 PHP ORM:http://docs.mongodb.org/ecosystem/drivers/php-libraries/如果你想使用ORM 也就是说,也许你有一个完整的堆栈框架,或者你想单独使用驱动程序。
此外,MongoDB 不需要 JSON PHP(无论是什么)处理知识。来自 MongoDB 的所有结果作为 BSON 进入驱动程序,然后被反序列化为 PHP 中的标准字典,即关联数组。您在这里不需要 JSON PHP 处理知识。
与其他答案不同的是,对“将所有信息存储在单个 JSON 文档中”要非常谨慎,即因为 MongoDB 是 BSON 而不是 JSON,还因为应该非常仔细地考虑嵌入,并判断它是否适合您的场景. 实际上,您会发现_id
在大多数情况下将 s 以外的任何内容嵌入到其他行可能会导致问题,但正如我所说,这取决于场景。