为什么MongoDB $expr使查询有效



我正在使用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中包含聚合表达式。

最新更新