MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Grupo Mongodb por campo dbref


Costumava haver uma seção no manual que declarava explicitamente que DBRef não é suportado pela estrutura de agregação, juntamente com vários outros tipos de BSON.

A passagem antiga é lida conforme mostrado neste arquivo do Google Groups mensagem:

Pode ainda estar lá em algum lugar, mas eu simplesmente não consigo encontrá-lo agora :)

Além disso, como mencionado nesse tópico de mensagem, além de não ser suportado na estrutura de agregação, sua outra opção (e única opção real para agregação) é usar o mapReduce método em vez disso. Como um exemplo de shell:
db.Products.mapReduce(
    function() {
        emit( this.model.$id, { "actives": [this.isActive] } );
    },
    function(key,values) {
        var result = { "actives": [] };
        values.forEach(function(value) {
            value.actives.forEach(function(active) {
                result.actives.push( active );
            });
        });
    },
    { "out": { "inline": 1 } }
)

Não parece tão bom por causa do arbitrário { "_id": "", "value": { } } estrutura dos resultados do mapReduce, mas permite o tipo de agregação que você está procurando.

Também há referência a este problema do JIRA:SERVER-14466 , mas eu não aguentaria muito movimento nessa frente.

Portanto, você pode usar mapReduce, mas seria aconselhável deixar de usar DBRef e definir uma forma alternativa de "referências manuais", incorporando informações de "coleção" e "banco de dados" ou confiando na definição externa de tais coisas em seu esquema de aplicativo, dependendo em suas necessidades. Contanto que você siga as mesmas regras, poderá usar a estrutura de agregação para qualquer coisa com nomes de propriedade válidos.