我正在编写客户管理Web应用程序。我试图找出正确的方式来管理我的客户付款关系。每天,应用程序会向另一个API发送请求,并同步我存储在数据库中的每个客户的付款金额。我不断需要根据客户类型(合同类型、销售日期等)运行有关付款(付款金额)的报告。我已经有了clients
集合。我在两种方案之间进行选择:
{
"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)上使用两个不同的查询进行聚合吗?