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

MongoDB $sample

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

Пример

Да предположим, че имаме колекция, наречена 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(
   [
      { 
        $sample: { size: 3 } 
      }
   ]
)

Резултат:

{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }

В този случай посочих, че размерът на извадката е 3. Можем да видим, че трите документа са върнати в произволен ред.

Ето резултата, ако пусна същия код отново:

{ "_id" : 1, "name" : "Bob", "salary" : 55000 }
{ "_id" : 2, "name" : "Sarah", "salary" : 128000 }
{ "_id" : 9, "name" : "Xena", "salary" : 382000 }

Получаваме различен избор от документи.

Можем да увеличим размера на извадката, като увеличим броя.

Пример:

db.employees.aggregate(
   [
      { 
        $sample: { size: 5 } 
      }
   ]
)

Резултат:

{ "_id" : 9, "name" : "Xena", "salary" : 382000 }
{ "_id" : 3, "name" : "Fritz", "salary" : 25000 }
{ "_id" : 4, "name" : "Christopher", "salary" : 45000 }
{ "_id" : 8, "name" : "Zoro", "salary" : 300000 }
{ "_id" : 5, "name" : "Beck", "salary" : 82000 }

Връщане на случаен принцип на всички документи

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

Пример:

db.employees.aggregate(
   [
      { 
        $sample: { size: 100 } 
      }
   ]
)

Резултат:

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

Как $sample Изчислява резултата

$sample етап използва един от двата метода за получаване на резултата. Действителният използван метод зависи от сценария.

Следващата таблица очертава кой метод се използва за всеки сценарий.

Сценарий Метод, използван за получаване на резултатите
Всички от следните условия са изпълнени:
$sample е първият етап от тръбопровода
– Посоченият размер на извадката е по-малък от 5% от общите документи в колекцията
– Колекцията съдържа повече от 100 документа
$sample използва псевдослучаен курсор за избор на документи.
Всички горепосочени условия не срещнах. $sample извършва колекционно сканиране, последвано от произволно сортиране, за да избере посочения брой документи.

Дубликати

Документацията на MongoDB предупреждава, че $sample може да изведе един и същ документ повече от веднъж в неговия набор от резултати.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Мониторинг и защита на MongoDB с ClusterControl Advisors

  2. Получавайте известия за променени документи в mongodb

  3. Множество условия за присъединяване с помощта на оператора $lookup

  4. Node + Mongoose:Получаване на последно въведен ID?

  5. MongoDB:безопасно ли е да използвате идентификатора на документа публично?