2016-07-25 51 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