mongodb聚合获取当前日期

时间:2018-11-26 15:03:51

标签: mongodb aggregate

我正在使用metabase,并且具有本地mongodb查询。我想过滤昨天创建的文档。问题是我只有json。昨天有什么计算方法吗?

我的json是:

[...
{
    "$match": {
      "createdAt": { "$ne": "$yesterday" },
    }
},
...]

3 个答案:

答案 0 :(得分:1)

在Metabase中,实际上您可以通过使用Date()使用相对于今天(例如昨天)的日期。这是一种解决方法currently implemented in the mongo driver for metabase。此解决方法在内部将日期作为字符串处理,因此我们必须在尝试使用 yesterday 作为Date之前对其进行解析。

[
{
    "$project": {
        "_id": 1,
        "todayHandledAsString": Date(),
        "todayHandledAsDate": {"$dateFromString": {
            "dateString": Date()
        }}
    }
},
{
    "$project": {
        "_id": 1,
        "todayHandledAsString": 1,
        "todayHandledAsDate": 1,
        "yesterday": {
            "$subtract": ["$todayHandledAsDate", 86400000]
        }
    }
}
]

不幸的是,Metabase也不允许操作或注释,因此我们必须使用86400000的硬编码值而不是24 * 60 * 60 * 1000,后者是单日的毫秒数。

答案 1 :(得分:1)

很遗憾,Metabase不允许使用Date()立即获取Date。您还应该注意到dateFromString在mongoDB 3.6版和更高版本中可用,但这里的另一个问题是我认为dateFromString现在不能与现在的日期一起很好地工作,并且mongoDB返回一个错误,您应该在dateFromString中传递一个字符串以转换为Date! 所以我建议您在元数据库中获取昨天的日期,编写类似以下代码:

[{
  "$project": {
      "user": 1,
      "createdAt": 1,
      "yesterday": {
          "$subtract": [ISODate(), 86400000]
      }
  }
},
{
 "$project": {
     "user": 1,
     "yesterday": 1,
     "createdAt": 1,
     "dateComp": { "$cmp": ["$yesterday", "$createdAt"] }
 }
},
{
"$match": { 
     "dateComp": -1 
}}]

答案 2 :(得分:0)

pay_status是当前表的字段。将它们映射后,便可以选择。

[       
{$match:{{pay_status}}},
{$match:{{pay_time}}},
{$project:{...}}
]