sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb gruppe ved dbref felt

Der plejede at være et afsnit i manualen, der udtrykkeligt sagde, at DBRef ikke understøttes under aggregeringsrammen, sammen med forskellige andre BSON-typer.

Den gamle passage læst som vist i dette google-gruppearkiv besked:

Det kan stadig være der et sted, men jeg kan bare ikke finde det lige nu :)

Som nævnt i den meddelelsestråd er det også, at bortset fra at dette ikke understøttes i aggregeringsrammen, så er din anden mulighed (og eneste reelle mulighed for aggregering) at bruge mapReduce metode i stedet for. Som et shell-eksempel:

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

Det ser ikke så pænt ud på grund af den vilkårlige { "_id": "", "value": { } } struktur af mapReducer resultater, men det tillader den slags aggregering, du leder efter.

Der er også henvisning til dette JIRA-nummer:SERVER-14466 , men jeg ville ikke holde ud til meget bevægelse på den front.

Så du kan bruge mapReduce, men det vil være tilrådeligt at gå væk fra at bruge DBRef og definere en alternativ form for "manuelle referencer", enten ved at indlejre "samling" og "database" information eller stole på ekstern definition af sådanne ting i dit applikationsskema, afhængigt af på dine behov. Så længe du følger de samme regler der, kan du bruge aggregeringsrammen til alt med gyldige egenskabsnavne.




  1. Mongoose-egenskaben 'x' findes ikke på typen 'Dokument'

  2. Autofuldførelse filtreret med mongodb

  3. Sådan får du adgang til MongoDB

  4. Brug blåfugl til mongoose, fik .bind er ikke en funktion