MongoDB Regex $和$或搜索查询

时间:2016-04-19 14:37:48

标签: mongodb

我正在尝试构建一个查询,该查询将接受多个字段,这些字段可以使用正则表达式进行搜索,以进行部分字段匹配,并且对其他字段也有一个硬约束。

示例:

收藏:"项目"
必填信息:{propertyId:" abc",clientId:" xyz" } 要搜索的字段:nameserviceType.namemanager.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上,重新启动后,一切正常。

1 个答案:

答案 0 :(得分:0)

尝试以下脚本:

db.collection.find({
$and:[
  {propertyId:"7sHGCHT4ns6z9j6BC"}, 
  {
    $or:[
       {name: /HVAC/i}, 
       {"serviceType.name": /HVAC/i}, 
       {"manager.name": /HVAC/i}
    ]
  }]
})

以上查询将返回一个或多个文档,当且仅当propertyId匹配且nameserviceType.namemanager.name中的任何一个匹配所需的正则表达式。