在 MongoDB Atlas Search 中使用 $in 条件时,使用 $search 而不是 $match

问题描述 投票:0回答:1

在最近的一次培训中,我了解了使用

$search
运算符的好处。 我想修改我的
$match
查询以使用
$search
代替。 但是,我找不到
$in
运算符的等效项。

当字段需要匹配单个ObjectId时,没有问题,我可以使用

compound
运算符与
must
+
equals
并且它可以工作。

当我有多个 ObjectId 值时就会出现问题。 同样,如果仅适用于一个字段,我可以在指定

should
时使用
equals
+
minimumShouldMatch: 1

但是如果我有多个具有多个 ObjectId 值的字段,我不确定如何处理它...... 我应该如何使用 $search 运算符来转换这样的查询?

 { '$match':
     { '$and':
        [ { customer:
             { '$in': [ 5f3d6c51f5b2ed74fe93dd60, 5c221b4e4d17f1734806b4a5 ] } },
          { carrier: { '$in': [ 'carrier1', 'carrier2', 'carrier3' ] } },
          { status: { '$in': [ 'late', 'idle', 'delivered-late' ] } },
          { createDate: { '$gte': 2023-06-01T04:00:00.000Z } },
          { createDate: { '$lte': 2023-07-01T03:59:59.999Z } } ] } 
}
mongodb aggregate mongodb-atlas-search
1个回答
0
投票

您可以在 $search 查询中使用过滤选项

   $search: {
      "compound": {
        "filter": [{
          "queryString": {
            "defaultPath": "role",
            "query": "CLIENT OR PROFESSIONAL"
          }
        }]
      }
    }

或者您可以使用文档中提到的 $in 运算符,但它只允许某些数据类型

https://www.mongodb.com/docs/upcoming/reference/operator/query/in/#mongodb-query-op.-in

© www.soinside.com 2019 - 2024. All rights reserved.