【问题标题】:mongodb, how to use $not filter in querymongodb,如何在查询中使用 $not 过滤器
【发布时间】:2019-08-29 22:16:25
【问题描述】:

我想在 mongodb compass 中运行一个相当简单的查询:

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

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

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

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

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

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

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

编辑:

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

【问题讨论】:

    标签: mongodb mongodb-compass


    【解决方案1】:

    请尝试 $regex 应该可以工作:

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

    【讨论】:

    • 奇怪的是,我首先尝试了它,但它也没有工作......还有其他可能导致 $not 过滤器不起作用的东西吗?
    • 它对我有用。查看我附上的屏幕截图。请发布您收到的错误消息
    • 感谢您的示例!我对我的问题进行了编辑并添加了过滤器示例... MongoDb Compass 指示此过滤器在某些方面不正确,但没有说明如何...您使用什么应用程序来运行您的示例,也许我可以在那里尝试?
    • 我使用 Robo 3T - 1.2。如果可行,请接受答案以关闭
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2015-07-24
      • 1970-01-01
      • 2016-10-12
      • 2012-03-27
      • 1970-01-01
      相关资源
      最近更新 更多