在mongoD中将$ expr与$ elemMatch

时间:2019-11-27 11:29:59

标签: arrays mongodb

为什么$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
      }
   }
]

1 个答案:

答案 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 }