sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose / MongoDB:räkna element i array

Aha, jag har hittat lösningen. MongoDB:s aggregate ramverket tillåter oss att utföra en rad uppgifter på en samling. Särskilt anmärkningsvärt är $unwind , som delar upp en array i ett dokument i unika dokument , så att de kan vara grupper / räknas en masse .

MongooseJS exponerar detta mycket lättillgängligt på en modell. Med exemplet ovan ser detta ut som följer:

Thing.aggregate([
    { $match: { /* Query can go here, if you want to filter results. */ } } 
  , { $project: { tokens: 1 } } /* select the tokens field as something we want to "send" to the next command in the chain */
  , { $unwind: '$tokens' } /* this converts arrays into unique documents for counting */
  , { $group: { /* execute 'grouping' */
          _id: { token: '$tokens' } /* using the 'token' value as the _id */
        , count: { $sum: 1 } /* create a sum value */
      }
    }
], function(err, topTopics) {
  console.log(topTopics);
  // [ foo: 4, bar: 2 baz: 2 ]
});

Det är märkbart snabbare än MapReduce i preliminära tester över ~200 000 poster och skalar därför troligen bättre, men detta är bara efter en översiktlig blick. YMMV.




  1. Meteor Simple Schema - När modifieringsalternativet är sant måste valideringsobjektet ha minst en operator

  2. MongoDB - Aggregation - För att få unika föremål i array

  3. gruppera efter datum i mogodb-frågan utan att ta hänsyn till tid

  4. Hur skapar man Mongo-databasanslutningen i context.xml i Java-webbprojekt?