sql >> Database >  >> NoSQL >> MongoDB

Mongodb-groep op dbref-veld

Vroeger was er een sectie in de handleiding waarin expliciet werd vermeld dat DBref niet wordt ondersteund door het aggregatieraamwerk, samen met verschillende andere BSON-typen.

De oude passage wordt gelezen zoals weergegeven in dit archief van Google-groepen bericht:

Het kan er nog ergens zijn, maar ik kan het nu gewoon niet vinden :)

Ook zoals vermeld in die berichtenthread is dat behalve dat dit niet wordt ondersteund in het aggregatieraamwerk, je andere optie (en enige echte optie voor aggregatie) is om de mapReduce methode in plaats daarvan. Als shell-voorbeeld:

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

Het ziet er niet zo mooi uit vanwege de willekeurige { "_id": "", "value": { } } structuur van mapReduce-resultaten, maar het laat wel het soort aggregatie toe waarnaar u op zoek bent.

Er is ook een verwijzing naar dit JIRA-probleem:SERVER-14466 , maar ik zou niet veel beweging op dat front uithouden.

U kunt dus mapReduce gebruiken, maar het is aan te raden om af te stappen van het gebruik van DBRef en een alternatieve vorm van "handmatige verwijzingen" te definiëren, ofwel door "verzameling" en "database" in te bedden of te vertrouwen op een externe definitie van dergelijke dingen in uw toepassingsschema, afhankelijk van op uw behoeften. Zolang u daar dezelfde regels volgt, kunt u het aggregatieraamwerk gebruiken voor alles met geldige eigenschapsnamen.




  1. MongoDB $max

  2. Correcte syntaxis om mongodump van mongoDb docker-instantie te doen?

  3. doRedis met vreemde socketverbindingsfout in Ubuntu Linux, R en RStudio

  4. mongo toevoegen aan geneste array als invoer geen twee velden bevat die overeenkomen