2013-02-06 7 views
5

Meine Frage ist:Wie bekomme ich die Negation einer MongoDB-Abfrage?

db.users.find({"username" : {$regex : ".*substring.*"}}); 

Stattdessen Benutzernamen zu bekommen, die ‚Teilzeichenfolge‘ enthalten, ich brauche Benutzernamen, die es nicht enthalten.

+3

Haben Sie den Operator '$ not' versucht? –

+0

$ funktioniert nicht gut, danke! – Ognjen

Antwort

5

Dazu können Sie die $ nicht-Operator verwenden:

db.test.find({ username: { $not: /substring/ } }); 

Wie in:

> db.test.insert({ username: "Derick Rethans" }); 
> db.test.insert({ username: "Hannes Magunusson" }); 
> db.test.find({ username: { $not: /ag/ } }); 
{ "_id" : ObjectId("511258b36879ad400c26084f"), "username" : "Derick Rethans" } 

aber Sie müssen sich bewusst sein, dass reguläre Ausdrücke und die Verwendung des $ not Operator verhindern, dass Indizes verwendet werden können. Wenn Sie diese Abfrage sehr oft durchführen müssen, sollten Sie sich Ihren Schemaentwurf genauer ansehen.