mongodb exculde与数据匹配?

nat*_*ila 1 regex mongodb nosql pymongo mongodb-query

mongodb中有一些数据:

{'name': 'bob', age: 12}
{'name': 'sam': age: 34}
{'name': 'byaelle': age: 22}
Run Code Online (Sandbox Code Playgroud)

如果我想获取名称的数据包括am
我可以使用

{'name': {'$regex': 'am'}}
Run Code Online (Sandbox Code Playgroud)

但是,如何才能获取名称数据am

Bla*_*ven 6

当然你可以反过来$not:

db.collection.find({ "name": { "$not": /am/  } })
Run Code Online (Sandbox Code Playgroud)

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

db.collection.find({ "name": /^((?!am).)*$/ })
Run Code Online (Sandbox Code Playgroud)

要么

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

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


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

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

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

db.collection.find({ "name": { "$nin": [/bo/,/am/] } })
Run Code Online (Sandbox Code Playgroud)