如何在MongoDB中使用正则表达式查询嵌套文档?

在MongoDB中使用正则表达式查询嵌套文档主要有以下两种方式:

  1. 使用.操作符逐层访问嵌套文档,并在最内层使用正则表达式查询。
db.users.find({
  "address.city": {$regex: /^N/} 
})

上例中,先使用.操作符访问address字段,再访问city字段,最后在city字段上使用正则表达式查询首字符为N的城市。

  1. 使用$elemMatch操作符直接在数组类型的嵌套文档上进行正则表达式查询。
db.users.find({
  hobbies: {
    $elemMatch: {$regex: /music/i} 
  } 
})

上例中,hobbies字段是一个文档数组,直接使用$elemMatch在其中查找包含music(不区分大小写)的文档。

  1. 也可以在$elemMatch中使用.操作符逐层访问嵌套文档,再进行正则表达式匹配。
db.users.find({
  hobbies: {
    $elemMatch: { 
      name: {$regex: /^p/i},
      details.frequency: {$gt: 3} 
    }
  } 
})

上例中,先在$elemMatch中使用.操作符访问details字段,然后判断details.frequency大于3,最后在name字段上使用正则表达式查询。

  1. 可以同时使用$and条件与正则表达式,实现更复杂的逻辑。
db.users.find({
  $and: [
    {"address.city": {$regex: /^N/}},
    {hobbies: {$elemMatch: {name: {$regex: /music/i}}}} 
  ]
})