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

Řazení podle relevance pomocí MongoDB

MapReduce a jeho provádění na straně klienta bude příliš pomalé – měli byste použít agregační rámec (nový v MongoDB 2.2).

Mohlo by to vypadat nějak takto:

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

Všimněte si, že první a třetí člen potrubí vypadají identicky, je to záměrné a potřebné. Postup je následující:

  1. předávat pouze dokumenty, které obsahují značku „bar“ nebo „ahoj“.
  2. rozbalte pole značek (to znamená rozdělení do jednoho dokumentu na prvek značek
  3. předat pouze značky přesně „bar“ nebo „hello“ (tj. zbytek značek zahoďte)
  4. seskupit podle názvu (může to být také podle „$_id“ nebo jakékoli jiné kombinace původního dokumentu s uvedením počtu značek (z „bar“ a „hello“), které měl
  5. řazení v sestupném pořadí podle počtu relevantních značek
  6. (volitelně) omezte vrácenou sadu na 10 nejlepších.


  1. Redis SYNC a EXEC

  2. Vložte hodnotu na konkrétní pozici v poli v MongoDB

  3. Vraťte BsonDocument v ApiController

  4. vytvořit zabezpečenou databázi v mongodb