【问题标题】:$not using in Aggregation Framework (mongodb)$不在聚合框架(mongodb)中使用
【发布时间】:2014-07-23 21:12:17
【问题描述】:

基本上我想获得不以“3D@”字母开头的项目。我正在进行聚合,因为某些项目文本字段重复。我只需要一个。

这样的收藏

{
   Message:{
   Text: "3d@ asd....",
   .................
   },
   Message:{
   Text: "3d@ asd....",
   .................
   },
   Message:{
   Text: "asd....",
   .................
   },
   Message:{
   Text: "dfg....",
   .................
   },
   Message:{
   Text: "3d@ asd2....",
   .................
   },
   Message:{
   Text: "3d@ asd3....",
   .................
   }
}

这样查询

db.messages.aggreagation(
{ "$match" : { "Message.Text" : { "$not" : "/^3d\\@" } } },
{ "$group" : { "_id" : "Message.Text" } }
);

我收到了这个错误

命令“聚合”失败:异常:错误查询:BadValue $not 需要正则表达式或文档(响应:{“errmsg”:“异常:错误查询:BadValue $not 需要正则表达式或文档”,“代码" : 16810, "ok" : 0.0 })

我的错误是什么?

谢谢。

【问题讨论】:

    标签: regex mongodb aggregation-framework


    【解决方案1】:

    就像错误消息所说,$not 值必须是正则表达式,而不是字符串:

    db.messages.aggreagation(
        { "$match" : { "Message.Text" : { "$not" : /^3d@/ } } },
        { "$group" : { "_id" : "Message.Text" } }
    );
    

    【讨论】:

      【解决方案2】:

      Mongo:PCRE 正则表达式

      使用这个正则表达式:

      ^(?i)(?!3D@)
      

      说明

      • ^ 锚断言我们位于字符串的开头
      • (?i) 开启不区分大小写模式
      • 否定的前瞻(?!3D@) 断言后面的不是3D@

      【讨论】:

      • 非常好!在哪里可以找到完整的正则表达式列表?
      • a complete list of regex 你的意思是正则表达式教程?我将从 rexegg.com、regular-expressions.info 或 SO FAQ 开始(请参阅 regex 标签顶部的 url)书籍:Friedl、Goyvaerts
      猜你喜欢
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      • 2013-07-20
      • 2012-09-24
      • 1970-01-01
      相关资源
      最近更新 更多