2016-07-25 1 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 ({"Почтовый \ u00a0Code": 2800}) действительно работает? – sergiuz

+0

Да, я протестировал его. Предполагая, что это на самом деле неразрывное пространство. :-) – helmy

+0

Не работает в моей оболочке – sergiuz

Смежные вопросы