$不使用聚合框架(mongodb)



基本上我希望得到不以"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" } }
);

我得到那个错误

命令'aggregate' failed: exception: bad query: BadValue $not needs a regex or a document (response: {"errmsg": "exception: bad query: BadValue $not needs a regex or a document", "code": 16810, "ok": 0.0})

我的错是什么?

谢谢。

就像错误消息所说的那样,$not值需要是一个正则表达式,而不是字符串:

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

蒙古文:PCRE Regex

使用这个正则表达式:

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

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

最新更新