MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Gruppe nach dbref-Feld

Früher gab es einen Abschnitt im Handbuch, in dem ausdrücklich angegeben wurde, dass DBRef nicht vom Aggregation Framework unterstützt wird, zusammen mit verschiedenen anderen BSON-Typen.

Die alte Passage lautete wie in diesem Google Groups-Archiv gezeigt Nachricht:

Es könnte noch irgendwo da sein, aber ich kann es gerade nicht finden :)

In diesem Nachrichten-Thread wird auch angedeutet, dass abgesehen davon, dass dies nicht im Aggregations-Framework unterstützt wird, Ihre andere Option ( und einzige wirkliche Option für die Aggregation ) darin besteht, mapReduce Methode statt. Als Shell-Beispiel:

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 } }
)

Es sieht wegen des willkürlichen { "_id": "", "value": { } } nicht so schön aus Struktur der mapReduce-Ergebnisse, aber es ermöglicht die Art der Aggregation, nach der Sie suchen.

Es gibt auch einen Verweis auf dieses JIRA-Problem:SERVER-14466 , aber ich würde an dieser Front nicht viel Bewegung aushalten.

Sie können also mapReduce verwenden, aber es wäre ratsam, sich von der Verwendung von DBRef zu entfernen und eine alternative Form von "manuellen Referenzen" zu definieren, indem Sie entweder "Sammlungs" - und "Datenbank" -Informationen einbetten oder sich auf externe Definitionen solcher Dinge in Ihrem Anwendungsschema verlassen, je nachdem auf Ihre Bedürfnisse. Solange Sie dort dieselben Regeln befolgen, können Sie das Aggregations-Framework für alles mit gültigen Eigenschaftsnamen verwenden.