Многократная группировка в NoSQL - PullRequest
0 голосов
/ 27 августа 2018

Я разрабатываю программное обеспечение для выставления счетов для ведения ежедневных записей. Я использую базу данных PyGTk (для пользовательского интерфейса) и 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
        }
    ]
}

Я хочу следующие записи из записей:

  1. Общая дневная сумма
  2. Сумма суммы, сгруппированная по способу оплаты
  3. Количество каждого предмета ежедневно (если возможно)

Пример вывода

{
'date':'27/08/2018',
'total_amount': 335,
'payment_mode': [{'Cash': 85},{'Card': 125}, 'Online': 125],
'item_count': [{'abc':3},{'xyz':5},{'pqr':1}]
}

Я новичок в NoSQL, поэтому не могу понять, как сделать все за один запрос. Пожалуйста, скажите мне, возможно ли это или нет, или есть ли лучший способ хранить записи.

1 Ответ

0 голосов
/ 27 августа 2018

Если вам нужен определенный атрибут из каждой записи, вы можете легко получить к нему доступ, создав курсор и итерировав каждую запись в нем.

предположим, что ваша коллекция называется '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/

...