NoSQL中的多个分组

时间:2018-08-27 13:59:12

标签: python nosql pymongo nosql-aggregation

我正在开发用于维护每日记录的计费软件。我正在使用PyGTk(用于UI)和MongoDB(NoSQL)数据库。我以以下格式存储每张帐单的记录

git flow feature finish

我希望从记录中获得以下信息:

  1. 每日总金额
  2. 按付款方式分组的金额总和
  3. 每天(如果可能)的每个项目的计数

样本输出

{
    "_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
        }
    ]
}

我是NoSQL的新手,因此无法弄清楚在一个查询中做所有事情。请告诉我是否有可能,或者是否有更好的存储方式。

1 个答案:

答案 0 :(得分:0)

如果要从每个记录中获取特定属性,则可以通过创建游标并迭代其中的每个记录来轻松访问它。

假设您的集合名称为'billing_software',那么您可以使用以下代码段获取所需的输出:

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/