Come posso utilizzare l'operatore "Non mi piace" in MongoDB


98

Posso usare l' Likeoperatore SQL usando pymongo,

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

Ma come posso utilizzare Not LikeOperator?

Provai

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

ma ho ricevuto un errore:

OperationFailure: $ not non può avere un'espressione regolare


1
So che è un po 'tardi, ma in MongoDB 4.2 l' operatore $note $regexin combinazione sembra funzionare per me.
b00r00x0

Risposte:


139

Dai documenti :

L'operatore $ not non supporta le operazioni con l'operatore $ regex. Utilizzare invece // o nelle interfacce del driver, utilizzare la capacità di espressione regolare della propria lingua per creare oggetti di espressioni regolari. Considera il seguente esempio che utilizza l'espressione di corrispondenza del modello //:

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

MODIFICA (@idbentley):

{$regex: 'ttt'}è generalmente equivalente a /ttt/in mongodb, quindi la tua query diventerebbe:

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

EDIT2 (@KyungHoon Kim):

In Python , di seguito uno funziona:

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

2
Per essere chiari, {$regex: 'ttt'}è generalmente equivalente a /ttt/in mongodb, quindi la tua query diventerebbe db.test.find({c: {$not: /ttt/}}.
idbentley

@idbentley grazie. Ho aggiornato la mia risposta con il tuo chiarimento.
shx2

1
Grazie mille. Per altre persone, ho usato 'c':{'$not':re.compile('ttt')}. Ovviamente, è necessario importare nuovamente
KyungHoon Kim

Grande. Ho anche aggiunto il tuo commento alla risposta, per i posteri.
shx2

1
Questo sembra essere lo stesso caso di $ ne e $ regex. Qualcuno può confermarlo, o almeno aggiungerlo?
DBrown

56

Puoi farlo con regex che non contiene una parola. Inoltre, puoi usare $options => iper maiuscole e minuscole ricerca insensibile.

Non contiene string

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

Senza distinzione tra maiuscole e minuscole string

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

Inizia con string

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

Finisce con string

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

Contiene string

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

Conserva questo come segnalibro e un riferimento per qualsiasi altra modifica di cui potresti aver bisogno. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.