web-dev-qa-db-ja.com

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

Likeを使用してSQL pymongo演算子を使用できます。

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

しかし、どのようにNot Like演算子を使用できますか?

私は試した

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

しかし、エラーが発生しました:

OperationFailure:$ notに正規表現を含めることはできません

85
KyungHoon Kim

docs から:

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

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

編集(@idbentley):

{$regex: 'ttt'}は通常、mongodbの/ttt/と同等であるため、クエリはdb.test.find({c: {$not: /ttt/}}になります。

EDIT2(@KyungHoon Kim):

Pythonでは、これは機能します:'c':{'$not':re.compile('ttt')}

120
shx2

Wordを含まない正規表現を使用できます。また、$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/

50
Somnath Muluk