MongoDB不区分大小写的数组

时间:2018-07-06 05:56:10

标签: node.js mongodb

我有一个mongodb集合名称的雇主,下面是一些示例文件

[{
"companyName" : "XYZ Corp",
"employee" : [
    {
        "name" : "john smith"
    },
    {
        "name" : "john doe"
    }
 ]
 },
 {
  "companyName" : "ABC Corp",
  "employee" : [
    {
        "name" : "Marco Doe"
    },
    {
        "name" : "Mark smith"
    }
  ]
  }]

现在,我想编写一个不区分大小写的查询,我将提供companyName和雇员姓名,并希望从雇员数组中提取该雇员姓名。 我写了类似的查询

db.employer.update({companyName: { '$regex': /^ABC Corp$/i }}, {$pull: {employee: {name: '/^mark smith$/i'}}})

在任何情况下都将考虑员工姓名。上面的查询不起作用,它没有从数组中提取相应的员工姓名mark smith

2 个答案:

答案 0 :(得分:2)

考虑此示例,

{ <field>: { $regex: /pattern/, $options: '<options>' } }

您还可以阅读完整的文档或查看更多的Mongodb regexp示例here.

我认为您不仅需要搜索{field: /regex/i},还需要指定每个单独使用正则表达式的字段。

因此您的代码应该是

db.employer.update({companyName: { '$regex': /^ABC Corp$/i }}, {$pull: {employee: {name: {regex: /^mark smith$/i}}}})

还将根据正则表达式搜索名称字段。

由于您上面的代码仅在companyName字段上使用了regexp而没有在name字段上使用。

此外,请记住删除正则表达式模式中的引号。 评论中的注释(谢谢约翰)。

答案 1 :(得分:0)

尝试一下。 :)

db.employer.update(
  {
    companyName: { 
      '$regex': /^ABC Corp$/i 
    }
  }, 
  {
    $pull: {
      employee: {
        name: {
          regex: '/^mark smith$/i'
        }
      }
    }
  }
)