MongoDBで「Not Like」演算子を使用するにはどうすればよいですか


98

私は、SQLを使用することができますLikeオペレータが使用してpymongo

db.test.find({'c':{'$regex':'ttt'}})

しかし、どうすればNot Likeオペレーターを使用できますか?

私は試した

db.test.find({'c':{'$not':{'$regex':'ttt'}})

エラーが発生しました:

OperationFailure:$ notは正規表現を持つことができません


私はこれが少し遅れていることを知っていますが、MongoDB 4.2では$notand $regex演算子を組み合わせることでうまくいくようです。
b00r00x0

回答:


138

ドキュメントから:

$ not演算子は、$ regex演算子を使用した操作をサポートしていません。代わりに//を使用するか、ドライバーインターフェイスで、言語の正規表現機能を使用して正規表現オブジェクトを作成します。パターンマッチ式//を使用する次の例を検討してください。

db.inventory.find( { item: { $not: /^p.*/ } } )

編集(@idbentley):

{$regex: 'ttt'}一般的に/ttt/はmongodbと同じなので、クエリは次のようになります。

db.test.find({c: {$not: /ttt/}}

EDIT2(@KyungHoonキム):

python、1つの作品以下:

'c':{'$not':re.compile('ttt')}

2
明確 {$regex: 'ttt'}にするため/ttt/に、これは一般的にmongodbと同じであるため、クエリはになりdb.test.find({c: {$not: /ttt/}}ます。
idbentley 2013年

@idbentleyありがとうございます。私はあなたの説明で私の答えを更新しました。
shx2 2013年

1
どうもありがとうございます。他の人はを使いました'c':{'$not':re.compile('ttt')}。もちろん、あなたが再インポートする必要が
KyungHoonキム・

すごい。後世のために、回答にもコメントを追加しました。
shx2 2013年

1
これは、$ neと$ regexの場合と同じようです。誰でもこれを確認できますか、少なくとも追加できますか?
DBrown '25年

55

単語を含まない正規表現でできます。また、$options => i大文字と小文字を区別しない検索の場合にも使用できます。

含まない string

db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

大文字と小文字を区別しない string

db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})

で始まる string

db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})

で終わる string

db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})

含む string

db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})

これをブックマークとして保持し、必要に応じて他の変更を参照してください。 http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.