web-dev-qa-db-fra.com

Comment utiliser l'opérateur 'Not Like' dans MongoDB

Je peux utiliser le SQL Like Operator en utilisant pymongo,

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

Mais comment puis-je utiliser Not Like Opérateur?

J'ai essayé

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

mais j'ai eu une erreur:

OperationFailure: $ ne peut pas avoir de regex

85
KyungHoon Kim

De la docs :

L'opérateur $ not ne prend pas en charge les opérations avec l'opérateur $ regex. Utilisez plutôt // ou dans vos interfaces de pilote, utilisez la fonctionnalité d’expression régulière de votre langage pour créer des objets d’expression régulière. Prenons l'exemple suivant qui utilise l'expression de correspondance de modèle //:

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

EDIT (@idbentley):

{$regex: 'ttt'} Est généralement équivalent à /ttt/ Dans mongodb, votre requête deviendra donc db.test.find({c: {$not: /ttt/}}

EDIT2 (@KyungHoon Kim):

En python, cela fonctionne: 'c':{'$not':re.compile('ttt')}

120
shx2

Vous pouvez faire avec regex qui ne contient pas un mot. En outre, vous pouvez utiliser $options => i en cas de recherche insensible.

Ne contient pas string

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

Insensible à la casse exacte string

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

Commence par string

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

Se termine par string

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

Contient string

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

Conservez-le en tant que signet et référence pour toute autre modification dont vous pourriez avoir besoin. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

50
Somnath Muluk