我正在使用Metabase,它使用MongoDB。需要进行自定义聚合。因此,我尝试创建一个简单的聚合查询,查询在过去90天内创建的数据。
问题:
我找到了两种可行的方法。然而,一个返回所需的数据,一个不返回。看起来,这两个查询都在做同样的事情。谁能更详细地解释一下第二种方法不同吗?第一个查询返回记录:
db.records.aggregate([
{
"$match": {
"$expr": {
"$gte": [
"$createdAt", { "$subtract": [ISODate(), { "$multiply": [3600000, 24, 90] }] }
]
}
}
}
])
第二个不返回记录的查询:
db.records.aggregate([
{
"$match": {
"createdAt": {
"$gte": {
"$subtract": [ISODate(), { "$multiply": [3600000, 24, 90] }]
}
}
}
}
])
注意:查询无效意味着查询运行了,但是没有返回任何记录。
因为这就是它的工作原理,如果你想在$match
中使用$subtract
,它必须在$expr
中。
从文档:https://docs.mongodb.com/manual/reference/operator/aggregation/match/
$match
接受指定查询条件的文档。查询语法与读取操作查询语法相同;即$match
不接受原始聚合表达式。相反,使用$expr
查询表达式在$match
中包含聚合表达式。