Not Duplicate :: Как сортировать и фильтровать внутри группы в mongoDB - PullRequest
0 голосов
/ 18 октября 2019

У меня есть такая коллекция:

{
"document_id": "firstDoc",
"date_changed" : ISODate("2017-07-26T17:52:37.061Z"),
"enabled": false
},
{
"document_id": "firstDoc",
"date_changed" : ISODate("2018-07-26T17:52:37.061Z"),
"enabled": true
},
{
"document_id": "secondDoc",
"date_changed" : ISODate("2017-07-26T17:52:37.061Z"),
"enabled": true
},
{
"document_id": "secondDoc",
"date_changed" : ISODate("2018-07-26T17:52:37.061Z"),
"enabled": true
}

Я хочу groupby document_id 1-й, затем для каждого набора получите документ с максимальным значением date_changed, а затем отфильтруйте документ "enabled": true

Таким образом, ожидаемый результат:

{
    "document_id": "secondDoc",
    "date_changed" : ISODate("2018-07-26T17:52:37.061Z"),
    "enabled": true
    },
{
    "document_id": "firstDoc",
    "date_changed" : ISODate("2018-07-26T17:52:37.061Z"),
    "enabled": true
    }

Почему ответ на другой вопрос не может решить мою проблему: В другом вопросе требуется только простая группировка и подсчет.

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

Я пробовал это:

var myCursor = db.configurations.aggregate([
{$group: {'_id':'$document_id',
          'date':{$max: 'date_changed'}
          }
}
]);
while (myCursor.hasNext()) {
    var eachDoc = myCursor.next();
    printjson(eachDoc.config.booknow.shoppingList.enabled);
    printjson(eachDoc.document_id);
}

Но выдает ошибку: TypeError: myCursor.hasNext is not a function (shell):1

БД версия 2.4.13 Кто-нибудь может помочь? Спасибо.

1 Ответ

0 голосов
/ 19 октября 2019

Ошибка, которой вы поделились, скорее связана с вашей средой или с тем, как вы выполняете код. Выполняйте свой код построчно, и вы выясните проблему в вашей среде.

Ваш запрос правильный. Возможно, вы захотите поставить несколько нулевых проверок для строки printjson(eachDoc.config..., но это не связано с ошибкой, которую вы получаете.

...