NoSQL 中的多重分组
Posted
技术标签:
【中文标题】NoSQL 中的多重分组【英文标题】:Multiple Grouping in NoSQL 【发布时间】:2019-02-02 02:14:21 【问题描述】:我正在开发用于维护日常记录的计费软件。我正在使用 PyGTk(用于 UI)和 MongoDB(NoSQL)数据库。我以以下格式存储每张账单的记录
"_id" : ObjectId("5b83f95a3859201d46385779"),
"date" : "27/08/2018",
"bill_number" : 7,
"bill_amount" : 85,
"payment_mode" : "Cash",
"bill_content" : [
"item_code" : 1,
"item_name" : "abc",
"item_count" : 1
,
"item_code" : 2,
"item_name" : "xyz",
"item_count" : 2
]
"_id" : ObjectId("5b83f95f3859201d4638577b"),
"date" : "27/08/2018",
"bill_number" : 8,
"bill_amount" : 125,
"payment_mode" : "Card",
"bill_content" : [
"item_code" : 3,
"item_name" : "xyz",
"item_count" : 2
,
"item_code" : 2,
"item_name" : "abc",
"item_count" : 1
]
"_id" : ObjectId("5b83f95f3859201d4638577b"),
"date" : "27/08/2018",
"bill_number" : 8,
"bill_amount" : 125,
"payment_mode" : "Online",
"bill_content" : [
"item_code" : 3,
"item_name" : "abc",
"item_count" : 1
,
"item_code" : 2,
"item_name" : "xyz",
"item_count" : 3
,
"item_code" : 1,
"item_name" : "pqr",
"item_count" : 1
]
我想从记录中得到以下内容:
-
每日总金额
按付款方式分组的金额总和
每天每个项目的计数(如果可能)
样本输出
'date':'27/08/2018',
'total_amount': 335,
'payment_mode': ['Cash': 85,'Card': 125, 'Online': 125],
'item_count': ['abc':3,'xyz':5,'pqr':1]
我是 NoSQL 的新手,因此无法在一个查询中完成所有事情。请告诉我这是否可能,或者是否有更好的方法来存储记录。
【问题讨论】:
我对 NoSQL 也比较陌生,但我认为您可能必须开始使用一些二级索引。 NoSQL 不能像关系数据库那样处理数据。 NoSQL 数据的建模更多是通过考虑您要提出的问题,而不是如何存储数据。也许从这里开始? highlyscalable.wordpress.com/2012/03/01/… 感谢@mrunion 提供链接。我在建模时将 NoSQL 与关系数据库相关联。我会阅读并理解这些概念。 【参考方案1】:如果您想要每条记录的特定属性,那么您可以通过创建游标并迭代其中的每条记录来轻松访问它。
假设你的集合名称是'billing_software',那么你可以使用下面的sn-p得到你想要的输出:
collection = db.billing.software
all_records = collection.find()
for records in all_records:
temp = dict()
temp['date'] = records['date]
print(temp)
无论如何,回到你原来的问题。在您的情况下,您可能希望聚合集合,然后按日期对集合进行分组。
有用的链接: 1.https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/ 2.https://docs.mongodb.com/manual/reference/operator/aggregation/group/
【讨论】:
以上是关于NoSQL 中的多重分组的主要内容,如果未能解决你的问题,请参考以下文章