$ eq对于在管道中计算的参数不起作用

时间:2017-08-07 17:46:14

标签: mongodb mongodb-query aggregation-framework

我有以下查询:

country

这可以工作并返回多个文档。

现在我改为:

db.pmusers.aggregate(   
    {
        $addFields:{
            tomorrow: new Date(new Date().getTime() + 24 * 60 * 60 * 1000)
        }
    },  
    {
        $addFields:{
            tomorrow_day:{ 
                $dayOfMonth : '$tomorrow'               
            },
            tomorrow_month: {
                $month : '$tomorrow' 
            },
            day: {
                $dayOfMonth : '$dateOfBirth'
            }           
        }       
    },
    {
        $match : {
            day: {$eq : 8}
        }
    }
)

(我刚用db.pmusers.aggregate( { $addFields:{ tomorrow: new Date(new Date().getTime() + 24 * 60 * 60 * 1000) } }, { $addFields:{ tomorrow_day:{ $dayOfMonth : '$tomorrow' }, tomorrow_month: { $month : '$tomorrow' }, day: { $dayOfMonth : '$dateOfBirth' } } }, { $match : { day: {$eq : '$tomorrow_day'} } } ) 替换day: {$eq : 8}
此查询不返回任何内容。

如何解决这个问题?

P.S。

Veeram回应后的核心问题:

day: {$eq : '$tomorrow_day'}

1 个答案:

答案 0 :(得分:1)

$match使查询运算符的值不是类似于查询的变量。

$match替换为$redact并使用$eq(aggregation)运算符,该运算符将用于表达。

这样的东西

$redact会比较$day& $tomorrow_day $$KEEP会在与其他$$PRUNE匹配时进行记录。

{
    $redact: {
        $cond: [{
                $eq: ["$day", "$tomorrow_day"]
            },
            "$$KEEP",
            "$$PRUNE"
        ]
    }
}

根据您的使用案例,您可以将$addFields$redact合并到一个阶段,因此您只需要一次通过。