在最近的一次培训中,我了解了使用
$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 } } ] }
}
您可以在 $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