我有以下查询:
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}
)
此查询不返回任何内容。
如何解决这个问题?
Veeram回应后的核心问题:
day: {$eq : '$tomorrow_day'}
答案 0 :(得分:1)
$match
使查询运算符的值不是类似于查询的变量。
将$match
替换为$redact
并使用$eq(aggregation)运算符,该运算符将用于表达。
像
这样的东西 $redact
会比较$day
& $tomorrow_day
$$KEEP
会在与其他$$PRUNE
匹配时进行记录。
{
$redact: {
$cond: [{
$eq: ["$day", "$tomorrow_day"]
},
"$$KEEP",
"$$PRUNE"
]
}
}
根据您的使用案例,您可以将$addFields
和$redact
合并到一个阶段,因此您只需要一次通过。