使用 Django 进行 Mongodb 聚合

时间:2021-01-15 17:27:49

标签: python django mongodb

我正在尝试使用 django 和 python 开发 mongodb 聚合。

我有一个带有名为“sucre”的数据库和一个名为“bdua”的集合的图集服务器

在 settings.py 我有:

DATABASES = {
        'default': {
            'ENGINE': 'djongo',
            'NAME': 'morfeeweb',
            'ENFORCE_SCHEMA': False,
            'CLIENT': {
                'host': 'mongodb+srv://xxxxxx:xxxxxx@xxxxx.xxxxx.xxxxxx.mongodb.net/morfeeweb?retryWrites=true&w=majority',
                'port': 27017,
                'username': 'xxxxxx',
                'password': 'xxxxxxxx',
                'authSource': 'admin',
                'authMechanism': 'SCRAM-SHA-1'
            },
            'LOGGING': {
                'version': 1,
                'loggers': {
                    'djongo': {
                        'level': 'DEBUG',
                        'propagate': False,                        
                    }
                },
             },
        },
        'sucre': {
            'ENGINE': 'djongo',
            'NAME': 'sucre',
            'ENFORCE_SCHEMA': False,
            'CLIENT': {
                'host': 'mongodb+srv://xxxx:xxxxxx@xxxxx.xxxxx.xxxx.mongodb.net/sucre?retryWrites=true&w=majority',
                'port': 27017,
                'username': 'xxxxx',
                'password': 'xxxxxxxx',
                'authSource': 'admin',
                'authMechanism': 'SCRAM-SHA-1'
            },
            'LOGGING': {
                'version': 1,
                'loggers': {
                    'djongo': {
                        'level': 'DEBUG',
                        'propagate': False,                        
                    }
                },
             },
        }
    }

views.py

from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from random import randint

from django.db import connection

@login_required(login_url='/admin/login')
def consolidado(request):

    aggretation_sample = connection['sucre'].db.bdua.aggregate([
            {
            '$match': {'estado': 'AC', 'regimen': 'subsidiado'}
            },
            {
            '$group': { '_id': '$cod_EPS', 'Afiliados': {'$sum': 1}}
            },
            {
            '$sort': {'Afiliados': -1}
            }
            ])

    return HttpResponse(aggretation_sample)

它返回 'TypeError at /aseguramiento/ 'DefaultConnectionProxy' 对象不可下标'

请帮忙

1 个答案:

答案 0 :(得分:0)

django.db.connection 返回 default 数据库 (see the docs here)。您要使用:

from django.db import connections

aggretation_sample = connections['sucre']...