Javascript MongoDB查询仅适用于复制和粘贴

Javascript MongoDB查询仅适用于复制和粘贴,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,MongoDB有一个特殊的问题,当我尝试对数据库进行查询时,比如db.departments.find({“key”:“MEL 301”}),没有找到任何结果 我目前正在使用mLab托管我的MongoDB数据库,因此有一种方法可以直观地查看集合中的文档。当我找到具有键MEL 301的文档,并将MEL 301复制并粘贴到上面查询中的相应位置时,查询将成功并找到该文档。为了澄清这一点,只有当我将键值从数据库复制/粘贴到查询中而不是将其键入时,查询才会起作用 您可以使用这个shell命令测试数据库(用

MongoDB有一个特殊的问题,当我尝试对数据库进行查询时,比如
db.departments.find({“key”:“MEL 301”
}),没有找到任何结果

我目前正在使用mLab托管我的MongoDB数据库,因此有一种方法可以直观地查看集合中的文档。当我找到具有键
MEL 301
的文档,并将
MEL 301
复制并粘贴到上面查询中的相应位置时,查询将成功并找到该文档。为了澄清这一点,只有当我将键值从数据库复制/粘贴到查询中而不是将其键入时,查询才会起作用

您可以使用这个shell命令测试数据库(用户名是
stack
,密码是
overflow
):
mongo ds015335.mlab.com:15335/utcourses-u stack-p overflow

在测试了一些键值(不仅仅是
MEL 301
)之后,您可能会发现类似的情况–第一个查询是我键入
MEL 301
的地方,第二个查询是我从数据库本身复制/粘贴值的地方


正如注释中所指出的,当您将每种格式转换为十六进制时,以下是输出:

复制和粘贴:
4d 45 4c a0 33 30 31
(这里关注
a0
,这就是问题所在)

无需复制和粘贴:
4d 45 4c 20 33 30 31
20
是指每当您点击键盘上的空格键时)

20
是每次点击计算机上的空格键时得到的实际空白字符(您可以从中看到
20
十六进制值解析为符号
空格

a0
很棘手。它实际上是一个,与
空格
符号不同,实际上没有ASCII码这就是为什么当您键入
MEL 301
时,您敲击键盘上的空格键并输入解析为空格的
20
十六进制,但文档中的“空格”存储为不间断空格

问题是您的值是
MEL
+一个不间断空格字符+
301

以下是该
a0
的编码表(来自上述非中断空格链接):


在将数据导入数据库时,数据的原始编码似乎存在一些问题。

多亏了所有发表评论的人,这确实是一个编码错误。为了解决这个问题,我决定做一个小的效用函数。非中断空间将转换为常规空间,这将在MongoDB和mLab上进行测试和工作

exports.fixSpace = function(string) {
  var fixed = '';
  for (var i = 0; i < string.length; i++) {
    string.charCodeAt(i) === 160 ? fixed += ' ' : fixed += string[i];
  }
  return fixed;
}
exports.fixSpace=函数(字符串){
固定风险值=“”;
对于(变量i=0;i
然后你会发现一些不可靠的东西,比如一个不可见/不可打印的字符,它恰好被剪切/粘贴操作保留了下来。e、 g.
MEL 301
而不是
MEL[actual space]301
@MarcB这是我最初的想法,但我似乎不知道如何解决它。有什么想法吗?@Shrey我没有权限访问你的数据库:)
Error:Error:{“$err:“无权查询app.departments”,“code”:13}
我是否使用了错误的数据库?拉出记录(与其他字段匹配?),然后检查关键字段,看看里面有什么,例如,将其转换为十六进制值并查找奇怪的内容。