Агрегация MongoDB с использованием $ sample - PullRequest
0 голосов
/ 15 января 2020
{
    "_id" : 1,
    "country" : "us",
    "source" : "ARIN",
    "status" : "NEW",
    "createdDate" : ISODate("2016-05-03T08:52:32.434Z")
},
{
    "_id" : 2,
    "country" : "us",
    "source" : "ARIN",
    "status" : "NEW",
    "createdDate" : ISODate("2016-05-03T09:52:32.434Z")
},
{
    "_id" : 3,
    "country" : "cn",
    "source" : "APNIC",
    "status" : "NEW",
    "createdDate" : ISODate("2016-05-03T10:52:32.434Z")
},
{
    "_id" : 4,
    "country" : "eu",
    "source" : "RIPE",
    "status" : "NEW",
    "createdDate" : ISODate("2016-05-03T10:52:32.434Z")
},

Когда мы используем это в агрегации { $sample: { size: 3 } }, он вернет 3 случайных документов. Как использовать проценты. Пример: { $sample: { size: 50% } }?

1 Ответ

1 голос
/ 15 января 2020

Вы не можете сделать это, так как выражение для $sample должно быть положительным числом.

Если вам все еще нужно было использовать $sample, вы можете попытаться получить общее количество документов в коллекции, получить половину числа и затем запустить $sample:

1) Подсчитать количество документов в коллекции ( пн go Оболочка ):

var totalDocumentsCount = db.yourCollectionName.count()/2

print(totalDocumentsCount) // Replace it with console.log() in code

2) $sample для случайных документов:

db.yourCollectionName.aggregate([{$sample : {size : totalDocumentsCount}}])

Примечание:

Если вы хотите получить половину документов из коллекции (что составляет 50% документов), тогда $sample может не быть хорошим вариантом - это может стать неэффективным запросом. Также в результате $sample могут быть возвращены дубликаты документов (так что на самом деле вы можете не получить 50% уникальных документов). Попробуйте прочитать больше об этом здесь: $ sample

...