如何在MongoDB中查找数组元素以Dr.开头的文档?
问题分析与解决
你的查询错误原因在于:$elemMatch 里直接写 "Dr." 是在匹配数组中完全等于"Dr."的元素,但你的目标是匹配以"Dr."开头的元素,而且单条件匹配数组元素时,$elemMatch 其实可以不用,直接用正则更简洁。
正确写法1:直接使用正则表达式匹配数组字段
MongoDB会自动遍历数组元素,只要有任意元素符合正则规则就会返回该文档:
const result = await client.db("Test").collection("test") .find({ contact: /^Dr\./ });
这里的/^Dr\./是正则表达式,^表示字符串开头,\.是转义后的点(因为点在正则里是通配符,必须转义)。
正确写法2:结合$elemMatch使用正则(适用于多条件匹配场景)
如果后续需要给数组元素加更多条件,可以用$elemMatch包裹正则:
const result = await client.db("Test").collection("test") .find({ contact: { $elemMatch: { $regex: "^Dr\\." } } });
注意这里用$regex操作符时,点需要双重转义(因为在字符串里转义一次,正则里再转义一次)。
另外,如果你需要大小写不敏感的匹配,可以加上$options: "i",比如:
// 大小写不敏感匹配 const result = await client.db("Test").collection("test") .find({ contact: /^Dr\./i });
内容的提问来源于stack exchange,提问作者agent_bean
相关产品推荐
相关产品推荐

