Javascript MongoDB查询仅适用于复制和粘贴
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命令测试数据库(用
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}
我是否使用了错误的数据库?拉出记录(与其他字段匹配?),然后检查关键字段,看看里面有什么,例如,将其转换为十六进制值并查找奇怪的内容。