为什么$expr
内不支持$elemMatch
?当前其抛出错误为"$expr can only be applied to the top-level document"
。我看不出有什么逻辑原因,而且达到相同目的的最佳方法是什么?请找到示例查询。
[
{
"$lookup":{
"localField":"id",
"from":"agents",
"foreignField":"lead_id",
"as":"agents"
}
},
{
"$match":{
"assignment_supply_entity_mapping_id":{
"$in":[
1199
]
},
"agents":{
"$elemMatch":{
"id":{
"$in":[
699
]
},
"$and":[
{
"status_timestamps.failed_timestamp":{
"$exists":true
}
},
{
"$or":[
{
"status_timestamps.junk_timestamp":{
"$exists":false
}
},
{
"$and":[
{
"status_timestamps.junk_timestamp":{
"$exists":true
}
},
{
"$expr":{
"$lt":[
"$status_timestamps.failed_timestamp",
"$status_timestamps.junk_timestamp"
]
}
}
]
}
]
}
]
}
}
}
},
{
"$project":{
"_id":1
}
},
{
"$group":{
"count":{
"$sum":1
},
"_id":null
}
}
]
答案 0 :(得分:0)
也许添加一个助手字段?
{
"$lookup":{
"localField":"id",
"from":"agents",
"foreignField":"lead_id",
"as":"agents"
}
},
{$addFields: { XX: {$lt: ["$status_timestamps.failed_timestamp",
"$status_timestamps.junk_timestamp"] } }} ,
{
"$match":{
...
及以后
{
"$and":[
{
"status_timestamps.junk_timestamp":{
"$exists":true
}
},
{ "XX": true }