Mongo db aggregate $elemMatch returns 空集

Mongo db aggregate $elemMatch returns empty set

我正在尝试找出适合我当前案例的查询。 我有 Mongo 个数据库文件,看起来像这样

{ 
    "_id" : ObjectId("627e24df17446e1f646c945c"), 
    "phone_number" : "041041041", 
    "country" : "_si", 
    "blacklisted_service" : {
        "all" : false, 
        "place_order" : false, 
        "promo_code_sms" : true
    }, 
}

现在我正在尝试查询文档,其中 "phone_number": 041041041 && "country" : "_si" AND ("blacklisted_service.all": true OR "blacklisted_service.promo_code_sms": true)...

目前我正在尝试使用聚合函数和 $elemMatch 函数来实现我的目标,但我的结果总是空的

db.getCollection("blacklisted_sms").aggregate([
    {
        $match: {
            phone_number: '041041041',
            country: '_si',
            blacklisted_service: {
                $elemMatch: {
                    'all': true,
                    $or: [
                        {
                            promo_code_sms: true,
                        }
                    ]
                },
            }
        }
    }
]);

你能帮我定义正确的查询吗,如果 phone_number 和国家/地区匹配,除了检查一个 blacklisted_service 键值是否为真之外,这将 return 结果。 如果您有任何其他问题,请告诉我,我会提供。我正在使用 mongo 数据库版本 4.x。提前谢谢你

您可以尝试关注,

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $and: [
          { $eq: ["$phone_number", "041041041" ] },
          { $eq: [ "$country", "_si" ] },
          {
            $or: [
              { $eq: [ "$blacklisted_service.all", true ] },
              { $eq: [ "$blacklisted_service.promo_code_sms", true ] },
              
            ]
          }
        ]
      }
    }
  }
])

工作Mongo playground

db.collection.aggregate([
  {
    $match: {
      $and: [
        {
          "phone_number": "041041041"
        },
        {
          "country": "_si"
        },
        {
          $or: [
            {
              "blacklisted_service.all": true
            },
            {
              "blacklisted_service.promo_code_sms": true
            }
          ]
        }
      ]
    }
  }
])