MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Сортиране по уместност с MongoDB

MapReduce и правенето му от страна на клиента ще бъде твърде бавно - трябва да използвате рамката за агрегиране (ново в MongoDB 2.2).

Може да изглежда така:

db.collection.aggregate([
   { $match : { "tags": { "$in": ["bar", "hello"] } } },
   { $unwind : "$tags" },
   { $match : { "tags": { "$in": ["bar", "hello"] } } },
   { $group : { _id: "$title", numRelTags: { $sum:1 } } },
   { $sort : { numRelTags : -1 } }
   //  optionally
   , { $limit : 10 }
])

Обърнете внимание, че първият и третият член на тръбопровода изглеждат идентични, това е умишлено и е необходимо. Ето какво правят стъпките:

  1. предавайте само документи, които имат маркер "лента" или "здравей" в тях.
  2. развиване на масива от етикети (което означава разделяне на един документ на елемент от етикети
  3. предавайте само тагове точно "bar" или "hello" (т.е. изхвърлете останалите тагове)
  4. групиране по заглавие (може да бъде и по „$_id“ или всяка друга комбинация от оригинален документ, добавяйки колко етикета (от „bar“ и „hello“) има
  5. сортирайте в низходящ ред по брой подходящи тагове
  6. (по желание) ограничете върнатия набор до топ 10.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Проблеми при стартиране на примери в Meteor

  2. MongoDB има ли начин да актуализира документ, без да изпуска съществуващи елементи, които не се съдържат в данните за актуализиране

  3. Външни ключове в монго?

  4. Laravel MongoDB библиотека 'jenssegers/laravel-mongodb' hasMany връзка не работи

  5. Основен уеб API на Asp.net с грешка mongodb 500