1

我有一个相当简单的查询,我试图在 mongodb compass 中运行:

{ $and: [ { Source: "hostname" }, { Message: { $not: /.*unexpected data.*1234.*/ } } ] }

基本上,我的文档模型包含一个Source字段和一个Message字段。

我需要查询 Source 等于给定“主机名”且消息不包含“意外数据...1234”的所有文档

当我不在正则表达式中包含 $not 过滤器时,一切正常...所以我得到了包含此消息的所有文档...但是现在我需要所有其他不包含此消息的消息...并且我不知道如何正确使用 $not 。

MongoDb 手册中给出的示例仅显示将 $not 与一个语句一起使用......但由于某种原因,即使这对我也不起作用......

{ Message: { $not: /.*unexpected data.*1234.*/ } }

同样,如果没有 $not ,它也可以正常工作......我错过了什么?

编辑:

这是我正在谈论的图像,将这个过滤器放在 MongoDb Compass 中,它表明过滤器不正确...... MongoDb Compass 是否由于某种原因无法运行复杂的过滤器? 损坏的mongo过滤器

4

2 回答 2

2

在此处输入图像描述请尝试使用 $regex ,它应该可以工作:

find( { $and: [ { Source: "hostname" }, { Message: { $not: { $regex: /.*unexpected data.*1234.*/ } } } ] })
于 2019-08-30T02:32:10.947 回答
0

MongoDB Compass 仅支持用单引号括起来的正则表达式,不支持正斜杠。$regex: /.*unexpected data.*1234.*/应该如此$regex: '.*unexpected data.*1234.*'

https://jira.mongodb.org/browse/COMPASS-2993

于 2020-02-11T00:43:51.567 回答