我正在編寫客戶端管理Web應用程序。我試圖找出正確的方式來管理我的客戶 - 支付關係。一旦一天的應用程序發送請求到另一個API並同步我存儲在我的數據庫中的每個客戶端的支付金額。我經常需要根據客戶類型(contract_type,sale_date等)運行付款報告(付款金額)。我已經有一個clients
集合。我想選擇2種模式之間:MongoDB模式設計(嵌套數組與單獨集合)
{
"client_id": "asdf123",
"client_last_name": "BB",
"address": "123 Main St",
"city": "ATLANTA",
"payments_history": [
{
"contract_number": "asdf123",
"payment_date": ISODate("2012-09-02T07:00:00.0Z"),
"amount": 103.33,
"payment_number": NumberInt(1)
},
{
"contract_number": "asdf123",
"payment_date": ISODate("2012-09-30T07:00:00.0Z"),
"amount": 103.33,
"payment_number": NumberInt(2)
},
{
"contract_number": "asdf123",
"payment_date": ISODate("2012-11-04T07:00:00.0Z"),
"amount": 103.33,
"payment_number": NumberInt(3)
}
]
}
對戰創建單獨收集「payments
」,其中每個文檔是payment
。我覺得分開這些類型的數據會更好,因爲每個查詢都會將每個單獨的client
文檔增長到大量數據(如果我選擇特定字段,這仍然會佔用大量內存)。但另一方面,我將無法運行聚合報告(因爲它基於來自兩個不同集合的數據)。什麼是最好的方法?我應該將它們分開,並在服務器端(php)使用兩種不同的查詢進行聚合?
老實說,我看不到在這裏使用MongoDB或NoSQL的強大案例,因爲這看起來像一個非常簡單的關係用例。 – 2013-04-05 22:02:34
在這段時間內,像未知領域這樣的複雜性可能會發生變化。使用NoSQL的正確方法是什麼? – castt 2013-04-05 22:07:18
這聽起來像你已經遇到了一些沒有SQL的限制。但如果像你說的那樣,個人記錄沒有固定的模式,它仍然可能是你最好的解決方案。我會在下面寫出答案。 – 2013-04-05 22:29:04