无法在 mongodb 中组合多个非正则表达式条件

wyt*_*ten 1 mongodb

我正在尝试查找存在字符串 stackTrace 类型字段但既不包含“PROVIDER_SOURCE”也不包含“providers”的文档

这个计数似乎符合逻辑:

db.GroovyScriptResult.find({stackTrace:{$exists: true, $not: /PROVIDER_SOURCE/}}).count();
60
db.GroovyScriptResult.find({stackTrace:{$exists: true, $not: /PROVIDER_SOURCE/, $not: /providers/}}).count();
48
Run Code Online (Sandbox Code Playgroud)

但是当我打印一个时,返回的文档确实包含一个 stackTrace,其中包含“PROVIDER_SOURCE”。我究竟做错了什么?

db.GroovyScriptResult.findOne({stackTrace:{$exists: true, $not: /PROVIDER_SOURCE/, $not: /providers/}});
{
    "_id" : ObjectId("532313c8aa3c937c43ca40cb"),
    "stackTrace" : "Exception: could not execute query; SQL [/* criteria query */ select... this_.PROVIDER_SOURCE ..."
}
Run Code Online (Sandbox Code Playgroud)

Ana*_*lan 7

您可以使用$and运算符来实现您想要的:

db.GroovyScriptResult.findOne({
    $and:[
       {stackTrace:{$exists:true}}, 
       {stackTrace:{$not:/PROVIDER_SOURCE/}}, 
       {stackTrace:{$not:/providers/}}
    ]
})
Run Code Online (Sandbox Code Playgroud)