PHP通过查询获取MongoDBRef

时间:2012-07-15 12:49:54

标签: php mongodb mongodb-php

我想知道是否有办法执行find()并让Mongo自动返回关联的引用,而不必在返回父记录后运行getDBRef()。

我在PHP文档中没有看到它。我可以轻松地支持使用getDBRef,但它看起来效率不高。

另外......我很惊讶无法选择要在链接引用中返回的特定数据。我也可以只执行另一个手动查找语句,这样我就可以控制返回的内容......但 是一种更加注重性能的方法。

也许我应该改变我的方法,而不是使用PHP库类进行查找,生成我自己的JavaScript命令并使用MongoCode类运行它?这会起作用吗?如果是的话......我想知道它会是什么样子。 划伤然后前往Google

谢谢!

2 个答案:

答案 0 :(得分:3)

MongoDB不支持联接。 Database References (DBRefs)仅指存储_id引用其他文档的字段的做法。目前没有针对此的特定服务器端支持,并且对文档的引用保留需要另一个查询。有些MongoDB drivers具有便捷方法,因此您无需手动执行查找。如果您想要自己find()给定DBRef进行查找(或使用其他条件查找相关文档),它同样有效/高效。

根据您的使用案例和数据建模,DBRef链接的更有效替代方法可能是将相关数据嵌入为子文档。有关更多示例,请参阅Schema Design上的MongoDB wiki信息。

就性能而言,使用PHP查询比使用MongoCode(需要在服务器上评估的JavaScript)更好。 MongoCode实际上是用于更有限的用途,例如Map / Reduce功能。有关该方法的一些潜在限制,请参阅Server-Side Code Execution

答案 1 :(得分:0)

参考:http://docs.mongodb.org/manual/reference/database-references/

手动参考,其中将一个文档的_id字段另存为另一个文档作为参考。然后您的应用程序可以运行第二个查询以返回相关数据。这些引用对于大多数用例来说都很简单和充分。

DBRefs 是使用第一个文档的_id字段,集合名称以及(可选)其数据库名称的值从一个文档到另一个文档的引用。通过包含这些名称,DBRefs允许位于多个集合中的文档更容易与单个集合中的文档链接。

要解析DBRefs,您的应用程序必须执行其他查询才能返回引用的文档。许多驱动程序都有辅助方法,可以自动形成DBRef的查询。 驱动程序不会自动将DBRef解析为文档。

无论哪种方式,无论您使用哪种类型的引用,都需要自行解除引用。

希望它有所帮助!