MongoDB:无法引用带空格的字段

时间:2016-07-25 19:45:05

标签: mongodb mongodb-query

我有一个MongoDB集合PH_location,这是其中的一个文档:

> 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 }

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

1 个答案:

答案 0 :(得分: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

如果它是非中断空格,或者其他代码,如果它是其他一些字符。