【问题标题】:MONGODB return min value for a field if falls within last year otherwise return min value for collectionMONGODB 返回字段的最小值,如果属于去年,否则返回集合的最小值
【发布时间】:2021-06-11 08:30:30
【问题描述】:

我有一个包含这种格式的文档的集合:

{"_id":{"date_played":{"$date":"1998-03-28T00:00:00.000Z"},"course_played":4,"player_id":11},"score":[5,6,4,4,5,9,6,6,5,7,6,6,5,7,5,3,9,4],"handicap":30,"cash_won":0,"sort_order":6,"gross_score":102,"gross_sfpts":34,"skins_group":1,"score_differential":28,"pcc_adjustment":0,"player_name":"Dave"}

通过 _id.player_id 我试图返回去年(_id.date_played)内记录的“score_differential”的最小值,如果去年没有记录,那么我想要玩家的最小“score_differential”集合。 我尝试了很多组合,但这是我得到的最接近的组合:-

它返回正确的值,但问题是如果在一年内找到日期,我会返回两条记录,一条带有 _id: false 的记录在集合中最低,一条带有 _id: true 的记录在一年中最低。我的问题是我只想要一条记录而不是两条。非常感谢任何帮助,因为我在这方面花了几天时间,对于来自 mysql 的 mongodb 来说相对较新。

  {
    '$match': {
      '_id.player_id': 11
    }
  }, {
    '$group': {
      '_id': {
        '$min': [
          {
            '$gt': [
              '$_id.date_played', {
                '$dateFromParts': {
                  'year': {
                    '$subtract': [
                      {
                        '$year': new Date()
                      }, 1
                    ]
                  }, 
                  'month': {
                    '$month': new Date()
                  }, 
                  'day': {
                    '$dayOfMonth': new Date()
                  }
                }
              }
            ]
          }
        ]
      }, 
      'minWHI': {
        '$min': '$score_differential'
      }
    }
  }
] ```

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    谢谢,但我不再需要解决这个问题,我实际上在另一个查询的 $lookup 阶段使用了上面的代码,因为它返回一个数组,我最终只返回一个文档,我可以在其中测试匹配的字段我需要的值,当我试图分别测试主查询的每个部分并获得两个文档时,我感到很困惑。

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2017-07-23
      • 2014-11-21
      • 2016-04-14
      相关资源
      最近更新 更多