2016-07-25 43 views
0

我有一个MongoDB的集合PH_location,这也是它一个文件:的MongoDB:不能引用场与空间

> db.PH_location.findOne({}) 
{ 
    "_id" : ObjectId("579662fec773d83e625f71e8"), 
    "Postal Code" : 2800, 
    "town" : "Bangued", 
    "province" : "Abra", 
    "metro" : "" 
} 

我无法参照场"Postal Code"。查找和更新使用该字段的操作根本找不到它。例如:

> db.PH_location.findOne({},{"Postal Code":1}) 
{ "_id" : ObjectId("579662fec773d83e625f71e8") } 

> db.PH_location.updateMany({}, {$rename:{"Postal Code":"ZIP_code"}}) 
{ "acknowledged" : true, "matchedCount" : 2271, "modifiedCount" : 0 } 

任何想法的问题可能是什么?

+0

您的字段名称中可能包含不可打印的字符。 – styvane

回答

0

我敢打赌,这是一个非破坏性的空间,而不是一个普通的空间。

试试这个:

db.PH_location.find({"Postal\u00a0Code" : 2800}) 

您可以使用此调试按键字符:

function codepoints(str) { 
    var result = ""; 
    for (var i = 0, len = str.length; i < len; i++) { 
     result += "'" + str[i] + "':" + str.charCodeAt(i) + ", "; 
    } 
    return result; 
} 
function walk(obj) { 
    for (prop in obj) { 
    if (obj.hasOwnProperty(prop) && isNaN(prop)) { 
     print(prop + " " + codepoints(prop)); 
     walk(obj[prop]); 
    } 
    } 
} 
var cursor = db. PH_location.find() 
while (cursor.hasNext()) { 
    obj = cursor.next(); 
    walk(obj); 
} 

寻找在输出的空间' '。你会看到:

' ':32 

,如果它是一个空间,或

' ':160 

,如果它是一个非打破空间,或者一些其他的代码,如果是一些其他的字符。

+0

>你确定db.PH_location.find({“Postal \ u00a0Code”:2800})能行吗? – sergiuz

+0

是的,我测试过了。假设它实际上是一个不间断的空间。 :-) – helmy

+0

无法在我的shell中工作 – sergiuz