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/] } })
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/] } })