我有一个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
。
答案 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'
}
}
}
}
)