Mongoose查询字段不包含子字符串

时间:2017-08-04 23:24:45

标签: mongodb mongoose mongoose-schema

使用Mongoose,尝试查询所有不包含子字符串的记录。

我有一个用户架构,带有一个电子邮件字段。我想获取电子邮件字段不包含@ testschool.edu的所有用户文档。 Reg Ex似乎无效。

试过这个:

User.count()
    .where({email: { "$regex": '^((?!testschoo.edu).)*$', "$options": "i" }})

2 个答案:

答案 0 :(得分:0)

这实际上有效......只是没有正确的字符串。谢谢你指出 - Neil Lunn

答案 1 :(得分:0)

另一种可能的解决方案是使用逻辑查询运算符.mjs

$not

如果您想将多个子字符串模式“列入黑名单”,则可以使用逻辑查询运算符return User.find( { email: {$not: /.*testschool\.edu.*/} }, {}).fetch() ,该运算符也支持RegEx(官方文档未明确提及):

$nor

当然,在这种特殊情况下,我们知道在子字符串之后不应该有任何内容,因此我们可以更精确地搜索return User.find( { $nor: [{email: /.*testschool\.edu.*/}, {email: /.*catholicschool\.edu.*/] }, {}).fetch()

有关问题解决方案为何有效的详细说明,请参见此excellent answer