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

Mongoose / MongoDB:počítání prvků v poli

Aha, našel jsem řešení. aggregate MongoDB framework nám umožňuje provádět řadu úkolů na kolekci. Za zmínku stojí zejména $unwind , který rozděluje pole v dokumentu na jedinečné dokumenty , takže mohou být skupiny / počítané hromadně .

MongooseJS vystavuje to velmi přístupně na modelu. Pomocí výše uvedeného příkladu to vypadá následovně:

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

Je znatelně rychlejší než MapReduce v předběžných testech přes 200 000 záznamů, a proto se pravděpodobně lépe škáluje, ale to je pouze po zběžném pohledu. YMMV.




  1. Závažná chyba – třída „Mongo“ nebyla nalezena

  2. Redis zápis do .ssh/authorized_keys

  3. Jak najít mongo dokumenty se stejným polem

  4. Upozornění na vypršení platnosti klíče Redis s Jedisem