Агрегатная функция MongoDB: $ sort не работает с $ sample? - PullRequest
0 голосов
/ 11 мая 2018

В настоящее время мне не удается создать запрос mongoDB, который сначала использует сортировку, а затем выводит одну выборку.Документы в базе данных выглядят так:

{
    "_id" : "cynthia",
    "crawled" : false,
    "priority" : 2.0
}

Я пытаюсь добиться следующего: получить один случайный элемент с наивысшим приоритетом.
Я проверил его с помощью следующего запроса:

db.getCollection('profiles').aggregate([
   {$match: {crawled: false }}, 
   {$sort: {priority: -1}}, 
   {$sample: {size: 1}}
]) 

К сожалению, это не работает.Монго, кажется, полностью игнорирует $sort.Я не вижу разницы между использованием с $sort или нет.

Кто-нибудь с большим опытом работы с mongoDB имеет представление об этом?Если у вас есть идея о лучшей реализации функции «приоритет», просто скажите мне.

Каждая идея высоко ценится.

1 Ответ

0 голосов
/ 11 мая 2018

$ sample - это не то, что вы ищете. Согласно документам:

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

Таким образом, вы получите один случайный документ из отфильтрованного набора документов.

$ limit - это то, что вам нужно, поскольку он берет первые n документы с предыдущего этапа. Ваш конвейер должен выглядеть так:

db.profiles.aggregate([
    {$match: {crawled: false }}, 
    {$sort: {priority: -1}}, 
    {$limit: 1}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...