2015-05-11 40 views
0

我對Mongo DB相對較新,但是我發現它與我正在開發的項目很好地融合。我目前停留在一個不過的問題,我真的奮力化解......如何實現mongo db引用的服務器端查詢解決方案

這具體涉及到蒙戈DB的「使用說明書」引用,這裏記載:http://docs.mongodb.org/manual/reference/database-references/#document-references

,我工作的項目看每一個單獨的文檔都是可重用的對象實例,這意味着它可以嵌入到另一個文檔中,並且因爲我使用手動引用和客戶端一起解析引用,所以它工作得很好。當我想根據其中一個子對象的值來查找對象時,就會出現這個問題。

可能的情況:

  • 我們有一個訂單採集,存儲生成車間訂單。一個訂單對象有一個名爲「products」的屬性,它在mongo db中查看時是一個對產品對象的引用數組。
  • 我們還有一個Products集合,用於存儲可以在訂單中使用的產品。
  • 表示我們希望能夠找到包含產品「foo-bar」的所有訂單,同時銘記路徑order.products是引用數組(而不是嵌入對象),那麼最有效的方法是什麼去做這個?最理想的解決方案是簡單地使用order.products.name : 'foo-bar'

一些附加說明的能力:

  • 從數據庫中獲取所有訂單的對象和具有客戶端解析的對象過濾掉那些我們正在尋找的效率太低。
  • 將產品文檔嵌入到訂單文檔中並不是一種選擇,因爲能夠彼此獨立地修改訂單和產品文檔至關重要。
  • 我使用的PHP框架(與官方蒙戈DB PHP擴展)
  • 一個服務器端解決方案將是理想的

我簡要地看着上編寫自定義功能的能力訪問蒙戈DB mongo的服務器端,但我無法確定這是否是一種潛在的方式?

回答

1

似乎你想使用連接(來自SQL的一個術語)。 Mongodb不支持連接或替代技術。

,可以在這裏工作的最簡單的事情是兩步查詢(僞代碼)

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

這樣你就不要下載了一堆產品對象到客戶端,只有自己的ID。它適用於我的應用程序。

但是,這個任務當然更好地由真正的關係數據庫處理。

+0

是的,我來自RBDMS環境,但發現mongodb真的很好處理客觀數據結構...我慢慢接近相同的結論,因爲關係是工作的正確工具...謝謝很多的迴應 –