mongodb,如何在查询中使用$ not过滤器

时间:2019-08-29 22:16:25

标签: mongodb mongodb-compass

我有一个应该在mongodb指南针中运行的相当简单的查询:

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

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

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

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

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

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

再次,它可以在没有$ not的情况下正常工作...我想念什么?

编辑:

这里是我所讨论的图像,将此过滤器放置在MongoDb Compass中,表明该过滤器不正确... MongoDb Compass是否由于某种原因无法运行复杂的过滤器? broken mongo filter

2 个答案:

答案 0 :(得分:2)

enter image description here请尝试使用应该运行的$ regex:

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

答案 1 :(得分:0)

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

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