带有条件查询的MongoDB聚合$match阶段

hgqdbh6s  于 2023-06-05  发布在  Go
关注(0)|答案(1)|浏览(172)

我想在mongoDB聚合中做一个match stage,在这个match中,我想检查条件是否存在,使用一个自定义查询,如果不存在,使用另一个自定义查询。自定义查询是嵌套字段。
在搜索和阅读文档之后,我编写了这段代码。但它有一个错误。
我使用MongoDB v4.4。只有这个版本,不能切换到其他版本。
MongoError:FieldPath字段名称不能包含“.”。

{
  $match : {
    $expr : {
      $cond : {
        if: { $eq : [ 'type' , 'country'] },
        then: { 
          $and : [
            { 'countryState.status' : 'Confirmed' },
            { 'countryState.prop' : 'high' },          
          ]
        },
        else: {  },
      }
    }
  }
},

如果“type”字段等于country,我想使用自定义查询,如果不是,只使用{}查询。
我很感激任何人可以帮助我,如何在这个匹配阶段与条件查询。

huwehgph

huwehgph1#

你要求查询返回“this or that”,所以我们应该使用$or。借用@cmgchess playground链接中的示例数据,这个查询应该在逻辑上做你想要的事情,我相信:

db.collection.aggregate([
  {
    $match: {
      $or: [
        {
          "type": "country",
          "countryState.status": "Confirmed",
          "countryState.prop": "high"
        },
        {
          "type": {
            $ne: "country"
          }
        }
      ]
    }
  }
])

Demo

相关问题