MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Sortowanie według trafności w MongoDB

MapReduce i robienie tego po stronie klienta będzie zbyt wolne - powinieneś użyć frameworka agregacji (nowość w MongoDB 2.2).

Może to wyglądać mniej więcej tak:

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

Zauważ, że pierwszy i trzeci element potoku wyglądają identycznie, jest to celowe i potrzebne. Oto, co robią kroki:

  1. przekazuj tylko te dokumenty, które mają w sobie tag „bar” lub „hello”.
  2. rozwiń tablicę tags (co oznacza podzielenie na jeden dokument na element tags
  3. przekaż tylko tagi dokładnie „bar” lub „hello” (tj. odrzuć resztę tagów)
  4. grupuj według tytułu (może to być również „$_id” lub dowolna inna kombinacja oryginalnego dokumentu, dodając, ile tagów (z „bar” i „hello”) miał
  5. sortuj w porządku malejącym według liczby odpowiednich tagów
  6. (opcjonalnie) ogranicz zwrócony zestaw do pierwszej dziesiątki


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. BsonValue i niestandardowe klasy w MongoDB C# Driver

  2. Jak wykorzystać typ interfejsu jako model w mgo (Go)?

  3. Wykonywanie case-statement w ramach agregacji mongodb

  4. Jak importować i indeksować dane mongodb w solr 4

  5. MongoMapper near z maxDistance - Mongo::OperationFailure:wartości geograficzne muszą być liczbami: