我正在使用metabase,并且具有本地mongodb查询。我想过滤昨天创建的文档。问题是我只有json。昨天有什么计算方法吗?
我的json是:
[...
{
"$match": {
"createdAt": { "$ne": "$yesterday" },
}
},
...]
答案 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:{...}}
]