我正在编写客户端管理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