mongodb 排除匹配的数据?

mongodb exculde matched to the data?

mongodb中有一些数据:

{'name': 'bob', age: 12}
{'name': 'sam': age: 34}
{'name': 'byaelle': age: 22}

如果我想获取name的数据include am
我可以使用

{'name': {'$regex': 'am'}}

但是,我怎样才能得到 name exclude am 的数据?

您需要对 正则表达式对象 使用 $not 运算符,因为 $not 不能有 $regex

db.collection.find( { "name": { "$not" : /am/ }})

您还可以使用以下正则表达式 ^((?!am).)*$ 来匹配不包含单词的文本。

collection.find({ 'name': { '$regex': '^((?!am).)*$' }})

当然你可以用 $not:

db.collection.find({ "name": { "$not": /am/  } })

但是因为它是 $regex 你可以这样做:

db.collection.find({ "name": /^((?!am).)*$/ })

db.collection.find({ "name": { "$regex": "^((?!am).)*$", "$options": "gm" } })

如果您的字符串是以这种方式形成的,请确保内容匹配多行。


对于要排除的多个片段,您可以使用 | 在表达式中将它们分开。例如排除包含 "bo" 或 "am" 的单词:

db.collection.find({ "name": { "$regex": "^((?!bo|am).)*$", "$options": "gm" } })

或使用接受正则表达式的 $nin 运算符 ( "not" $in ):

db.collection.find({ "name": { "$nin": [/bo/,/am/] } })