0

我想知道是否有一种方法可以执行 find() 并让 Mongo 自动返回关联的引用,而无需在返回父记录后运行 getDBRef() 。

我在 PHP 文档中的任何地方都没有看到它。我可以轻松地支持使用 getDBRef,但它似乎没有它应该的效率。

另外...我很惊讶无法选择要在链接参考中返回的特定数据。我还不如执行另一个手动查找语句,这样我就可以控制返回是什么……但是必须有一种更注重性能的方式来做到这一点。

也许我应该改变我的方法,而不是使用 PHP 库类进行查找,而是生成我自己的 JavaScript 命令并使用 MongoCode 类运行它?那行得通吗?如果可以的话……我想知道它会是什么样子。挠头然后前往谷歌

谢谢!

4

2 回答 2

3

MongoDB 不支持连接。 数据库引用(DBRefs)只是指存储_id引用另一个文档的字段的做法。当前没有对此的特定服务器端支持,并且对文档的引用进行水合确实需要另一个查询。一些MongoDB 驱动程序具有方便的方法,因此您不必手动进行查找。如果你想自己做find()一个 DBRef 来查找(或使用其他标准来查找相关文档),它同样有效/高性能。

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

就性能而言,使用 PHP 查询比使用MongoCode(需要在服务器上评估的 JavaScript)更好。MongoCode 的真正目的是用于更有限的用途,例如在 Map/Reduce 函数中。有关该方法的一些潜在限制,请参阅服务器端代码执行

于 2012-07-15T21:05:24.203 回答
0

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

手动参考,您将一个文档的 _id 字段保存在另一个文档中作为参考。然后您的应用程序可以运行第二个查询以返回相关数据。对于大多数用例来说,这些参考资料既简单又足够。

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

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

所以无论哪种方式,无论您使用哪种类型的引用,您都需要自己进行取消引用。

希望能帮助到你!

于 2015-07-15T09:24:24.523 回答