Você pode fazer com regex que não contém uma palavra. Além disso, você pode usar $options => i
para o caso de pesquisa insensível.
Não contém string
db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})
Não diferencia exatamente maiúsculas de minúsculas string
db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})
Começa com string
db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})
Termina com string
db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})
Contém string
db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})
Guarde-o como um marcador e uma referência para quaisquer outras alterações que você possa precisar.
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
$not
e$regex
em combinação parece funcionar para mim.