如何为mongo db引用实现服务器端查询解决方案

时间:2015-05-11 19:08:31

标签: php mongodb

我对Mongo DB比较新,但我发现它与我正在处理的项目很好地融合。我目前陷入了一个问题,但我真的很难解决......

这特别与mongo db"手册"参考资料,记录在此处:http://docs.mongodb.org/manual/reference/database-references/#document-references

我正在处理的项目将每个文档视为可重用的对象实例,这意味着它可以嵌入到另一个文档中,并且因为我使用手动引用和客户端来解析引用,它工作得很好。当我希望能够根据其中一个子对象的值找到对象时,会出现问题。

可能的情况:

  • 我们有一个Orders集合,用于存储生成的车间订单。订单对象具有名为" products"的属性。当在mongo db中查看时,它是对产品对象的引用数组。
  • 我们还有一个产品系列,用于存储可在订单中使用的产品。
  • 说我们希望能够找到包含产品" foo-bar"的所有订单,并记住路径order.products是一个引用数组(不是嵌入对象) ),最有效的方法是什么?最理想的解决方案是能够简单地使用order.products.name : 'foo-bar'

一些补充说明:

  • 从数据库中获取所有订单对象并让客户端解析对象以过滤掉我们正在寻找的对象效率太低。
  • 将产品文档嵌入订单文档中不是一种选择,因为必须能够彼此独立地修改订单和产品文档。
  • 我正在使用PHP框架(以及官方mongo db php扩展)
  • 访问mongo db
  • 服务器端解决方案是理想的

我已经简要介绍了在mongo的服务器端编写自定义函数的能力,但我不能确定这是否是一种潜在的方法?

1 个答案:

答案 0 :(得分:1)

似乎您想使用连接(来自SQL的术语)。 Mongodb不支持连接或替代技术。

这里可以使用的最简单的事情是两步查询(伪代码)

product_ids = db.products.find(name: 'foo-bar').only('id')
orders = db.orders.find(product_id: {$in: product_ids})

这样您就不会将一堆产品对象下载到客户端,只会下载其ID。它在我的应用程序中对我很有用。

但是,当然,真正的关系数据库可以更好地处理这项任务。