sql >> Databáze >  >> NoSQL >> MongoDB

Skupina Mongodb podle pole dbref

V manuálu bývala část, která explicitně uváděla, že DBRef není podporován v rámci agregačního rámce, spolu s různými dalšími typy BSON.

Stará pasáž zní tak, jak je uvedeno v tomto archivu skupin google zpráva:

Možná to tam ještě někde je, ale teď to nemůžu najít :)

V tomto vláknu zprávy je také zmíněno, že kromě toho, že to není podporováno v agregačním rámci, pak vaší další možností (a jedinou skutečnou možností pro agregaci) je použít mapReduce místo toho. Jako příklad shellu:

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

Nevypadá to tak hezky kvůli libovolnému { "_id": "", "value": { } } struktura výsledků mapReduce, ale umožňuje druh agregace, který hledáte.

Je zde také odkaz na toto vydání JIRA:SERVER-14466 , ale na této frontě bych moc pohybu nevydržel.

Takže můžete použít mapReduce, ale bylo by doporučeno přestat používat DBRef a definovat alternativní formu „ručních odkazů“, buď vkládáním informací o „sbírce“ a „databázi“, nebo spoléháním se na externí definici takových věcí ve schématu vaší aplikace, v závislosti na na vašich potřebách. Pokud se budete řídit stejnými pravidly, můžete agregační rámec použít pro cokoli s platnými názvy vlastností.




  1. Jak se připojit k MongoDB z jiné třídy PHP?

  2. Připojte se k AWS ElastiCache pomocí In-Transit Encryption

  3. MongoDB jak zkontrolovat existenci

  4. Yii Emongodocuments poblíž dotazů ignorujících maxDistance