比较日期的Mongodb shell聚合查询未返回结果
我看不出这是什么问题。这不会有任何回报比较日期的Mongodb shell聚合查询未返回结果,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我看不出这是什么问题。这不会有任何回报 db.mycoll.aggregate([ {$project:{CreatedAt:"$CreatedAt",Now:"$$NOW",DateFloor:{$add:["$$NOW",-24*60*60000]}}}, {$match:{CreatedAt:{$gte:"$DateFloor"}}} ]) 但这会返回结果——用实际值替换DateFloor db.mycoll.aggregate([ {$project:{CreatedAt:"$Crea
db.mycoll.aggregate([
{$project:{CreatedAt:"$CreatedAt",Now:"$$NOW",DateFloor:{$add:["$$NOW",-24*60*60000]}}},
{$match:{CreatedAt:{$gte:"$DateFloor"}}}
])
但这会返回结果——用实际值替换DateFloor
db.mycoll.aggregate([
{$project:{CreatedAt:"$CreatedAt",Now:"$$NOW",DateFloor:{$add:["$$NOW",-24*60*60000]}}},
{$match:{CreatedAt:{$gte: ISODate("2020-04-28T23:17:56.547Z")}}}
])
查询的问题是在执行以下操作时:
{$match:{CreatedAt:{$gte:"$DateFloor"}}}
实际上,您正在检查CreatedAt
字段值大于输入字符串值的文档“$DateFloor”
,因此$match
没有将“$DateFloor”
视为同一文档中的另一个字段,而是将其视为字符串值。因此,要比较同一文档中的两个字段,您需要使用$gte
(这将允许您在查询语言中使用聚合表达式)
因此,当我说
聚合表达式
&为什么$gte
需要包装在$expr
中时,您可能会感到困惑-在您的实际查询中,MongoDB中指的是比较运算符,但在上面的查询中指的是聚合管道运算符,两者在技术上是相同的,但这是需要比较的同一文档中的两个字段。要在$match
中使用聚合表达式,您需要使用$expr
@Pete\ch。如果查询未返回任何内容,则应使用聚合运算符。
{
$match: {
{
$expr: {
$gte: ["$CreatedAt", "$DateFloor"];
}
}
}
}