我正在尝试构建一个查询,该查询将接受多个字段,这些字段可以使用正则表达式进行搜索,以进行部分字段匹配,并且对其他字段也有一个硬约束。
示例:
收藏:"项目"
必填信息:{propertyId:" abc",clientId:" xyz" }
要搜索的字段:name
,serviceType.name
,manager.name
目前,我有这样的查询,但如果没有结果,则返回所有结果,这没有用。
{
'$and': [
{ propertyId: '7sHGCHT4ns6z9j6BC' },
{ clientId: 'xyz' },
{ '$or':
[
{ name: /HVAC/gi },
{ 'serviceType.name': /HVAC/gi },
{ 'manager.name': /HVAC/gi }
]
}
]
}
如果有人对此有任何见解,我们将不胜感激。
示例文档:
{
_id: "abc",
propertyId: "7sHGCHT4ns6z9j6BC",
clientId: "xyz"
name: "16.000.001",
serviceType: {
_id: "asdf",
name: "HVAC"
},
manager: {
_id: "dfgh",
name: "Patrick Lewis",
}
}
预期结果是仅查找文档where
propertyId
=
7sHGCHT4ns6z9j6BC
AND
以下至少一个键:name, serviceType.name, or manager.name
匹配输入的字符串,在这种情况下,它是HVAC
,如果没有正则表达式字段匹配,则不返回任何内容。
更新 问题出在MongoDB上,重新启动后,一切正常。
答案 0 :(得分:0)
尝试以下脚本:
db.collection.find({
$and:[
{propertyId:"7sHGCHT4ns6z9j6BC"},
{
$or:[
{name: /HVAC/i},
{"serviceType.name": /HVAC/i},
{"manager.name": /HVAC/i}
]
}]
})
以上查询将返回一个或多个文档,当且仅当propertyId
匹配且name
,serviceType.name
或manager.name
中的任何一个匹配所需的正则表达式。