Nano Hash - криптовалюты, майнинг, программирование

как сгруппировать по дате в mongodb и получить три лучшие записи на основе количества

Ниже приведена структура моей коллекции

  _id                          advertisedTo    advertisedOn
  ---------------------------------------------------------
  5df72e39179e3225dc506f5b     923336749125    2019-12-14 
  5df72e39179e3225dc506f5c     923336745129    2019-12-14 
  5df72e39179e3225dc506f5d     923336749779    2019-12-14 
  5df72e57179e3225dc506f5e     923336749125    2019-12-14
  5df72e57179e3225dc506f5f     923336749330    2019-12-15
  5df72e57179e3225dc506f60     923336749335    2019-12-15
  5df73811179e3225dc506f61     923336749335    2019-12-15
  5df73811179e3225dc506f62     923336749335    2019-12-15
  5df73811179e3225dc506f63     923336749335    2019-12-15
  5df741c3179e3225dc506f65     923336742356    2019-12-15
  5df741c3179e3225dc506f66     923336739925    2019-12-15
  5df741c3179e3225dc506f67     923336725825    2019-12-15   
  5df74372179e3225dc506f69     923336014725    2019-12-16   
  5df74372179e3225dc506f6a     923336584915    2019-12-16   
  5df74372179e3225dc506f6b     923006749120    2019-12-16

Что я хочу сделать, так это получить лучшие рекламные номера на основе количества последних трех дней, которые я пробовал ниже заданного запроса, но это не дает мне точного результата.

 db.getCollection("advertisementhistories").aggregate([{$group:{_id:{advertisedOn:"$advertisedOn",advertisedTo:"$advertisedTo"},myCount: { $sum : 1 }}},{ $sort : { myCount : -1},{ $limit : 3 }])

чего я хочу

 advertisedOn    advertisedTo    myCount
 ---------------------------------------
 2019-12-14      923336749125    2
 2019-12-14      923336745129    1
 2019-12-14      923336749779    1
 2019-12-15      923336749335    4
 2019-12-15      923336742356    1
 2019-12-15      923336739925    1
 2019-12-16      923336014725    1   
 2019-12-16      923336584915    1   
 2019-12-16      923006749120    1

Спасибо за помощь

16.12.2019

  • Где $sort в вашем запросе? 16.12.2019
  • @krishnaPrasad я отредактировал свой запрос, я пропустил его, вставляя сюда 16.12.2019

Ответы:


1

Вы добавили этап $sort в конвейер агрегации следующим образом:

db.getCollection("testCollection").aggregate([
    {
        $group:{_id:{advertisedOn:"$advertisedOn"},myCount: { $sum : 1 }}
    },
    {
        $sort: {myCount:-1}
    }, 
    { 
        $limit : 3 
    }
])

Вывод, как показано ниже:

{ "_id" : { "advertisedOn" : "2019-12-15" }, "myCount" : 8 }
{ "_id" : { "advertisedOn" : "2019-12-14" }, "myCount" : 4 }
{ "_id" : { "advertisedOn" : "2019-12-16" }, "myCount" : 3 }
16.12.2019
  • сэр, это тот же запрос, который я пробовал до того, как он дал результат только одной даты, мне нужно подсчитать три первых числа за последние три дня 16.12.2019
  • В этом случае вы удалили advertisedTo из groub с помощью операции и выполняете groub только с помощью advertisedOn 16.12.2019
  • Обновлен запрос, если вы хотите добавить идентификаторы advertisedTo в массив, вы можете проверить ответ: stackoverflow.com/questions/47332895/ 16.12.2019
  • Также вы можете добавить оператора $match на три дня. 16.12.2019

  • 2

    Этот запрос даст результат, который вы ищете:

    db.test.aggregate( [
      { 
          $group: { 
              _id:  { 
                  on: "$advertisedOn", 
                  to: "$advertisedTo" 
              }, 
              myCount: { 
                  $sum: 1 
              } 
          } 
      },
      { 
          $project: { 
              advertisedOn: "$_id.on", 
              myCount: 1, 
              _id: 0 
          } 
      },
      { 
          $sort: { 
              advertisedOn: 1, 
              myCount: -1  
          } 
      }
    ] )
    
    17.12.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..