我有一大堆存储在MondoDB中的文本数据,用户可以通过关键字或短语进行查询,并且存在一些问题,其中一些数据具有unicode字符U + 00A0(不间断空格)而不是常规空间。
修复数据不是一个选项(那些nbsps是故意的),我仍然希望用户能够搜索并找到该数据。所以我更新了我们的Mongo查询构建代码,以便在用户输入空格的地方搜索任何空格[\ s],从而产生如下查询:
{ "tt" : { "$elemMatch" : { "x" : { "$regex" : "high[\s]performance" , "$options" : "i"} }}}
(查询还有更多内容,这只是相关内容。)
不幸的是,这并没有返回预期的结果。所以我用其他一些方法来实现这一点,并最终发现当我搜索“非非空格”[^ \ S]时,我得到了正确的结果,如下所示:
{ "tt" : { "$elemMatch" : { "x" : { "$regex" : "high[^\S]performance" , "$options" : "i"} }}}
这引出了我的问题 - 为什么“任何空格”(“\ s”)找不到这个文本而“not-non whitespace”(“^ \ S”)找不到它? Mongo对于什么算作空格和非空格有不同的规则吗?
整个数据都是UTF-8,MongoDB版本是2.2.2
答案 0 :(得分:2)
我认为这里的问题是\
,而不是空格。你能写一下\\
来证明我的推测吗?