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

MongoDB $sampleRate

В MongoDB, $sampleRate Етапът на конвейера на агрегация съответства на произволен избор на входни документи.

Броят на избраните документи е приблизителен процент на извадката, изразен като процент от общия брой документи.

$sampleRate операторът беше въведен в MongoDB 4.4.2.

Когато използвате $sampleRate , предоставяте честотата на дискретизация като число с плаваща запетая между 0 и 1 . Процесът на подбор използва равномерно произволно разпределение, а честотата на извадката, която предоставяте, представлява вероятността даден документ да бъде избран, докато преминава през тръбопровода.

Пример

Да предположим, че имаме колекция, наречена employees със следните документи:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }

Можем да използваме $sample етап, за да изберете произволно определен брой документи от тази колекция.

Пример:

db.employees.aggregate(
   [
      { 
        $match: { $sampleRate: 0.33 } 
      }
   ]
)

Резултат:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

Чрез предоставяне на честота на дискретизация от 0.33 , уточнихме, че приблизително една трета от документите трябва да бъдат върнати.

Реалният резултат обаче може да варира значително в зависимост от това колко документа има в колекцията. Колекциите с по-малък брой документи ще имат доста разнообразни резултати, докато по-големите колекции трябва да са по-близо до очакваното равномерно разпределение на случаен принцип.

За да демонстрирам това, ето набора от резултати, който получавам, когато стартирам същия код отново:

{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }

И отново:

{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }

И още веднъж:

{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 6, "name" : "Homer", "salary" : 1 }
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }

Това е по-малка колекция и така резултатите се различават значително.

Ако искате да върнете точен брой документи, използвайте $sample етап вместо това.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Подмножество на масиви в конвейера на рамката за агрегиране

  2. Как да изчислим текущата сума с помощта на агрегат?

  3. TypeError:ObjectId('') не може да се сериализира в JSON

  4. Защо mongoose използва схема, когато ползата от mongodb се предполага, че е без схема?

  5. конвертиране на база данни от mysql в mongoDb