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