我正在构建一个结合 AngularJS 框架和 MongoDB 的 HTML5 应用程序。设置类似于 ‘Wire up a backend’ AngularJS 主页中的演示。到目前为止,我已经成功地将大量文档保存在一个结构简单的 MongoDB 集合(托管在 Mongolab 上)中。这些文档包含带有拉丁字符的键和带有希腊字符或数字的值:
{ "name": "Νίκος", "value": 1.35}
我很确定这些文档是 utf-8 编码的。问题是,当我尝试使用 JS 查询数据库并传递包含希腊字符的字符串时,我得到零结果。
var queryString = "{\"name\": \"Νίκος\"}";
$scope.query_results = Project.query({q: query_string}, null, $scope.query_success);
使用 php 的相同查询会返回正确的结果。所有其他包含数值或拉丁字符的查询均已成功执行(来自 php 或 js)。所以唯一的问题是当我尝试使用希腊字符通过js查询数据库时。
我已检查js文档的编码为utf-8,并将html元字符集属性设置为utf-8。我还尝试在查询数据库之前将查询字符串编码为 utf-8,但没有成功。
有什么想法吗? 谢谢。
最佳答案
从 shell 为我工作(我复制了要插入的示例文档,然后从名称查询中复制),所以至少您不会遇到 utf-8 字符看起来相同但略有不同:
> db.test.insert({ "name": "Νίκος", "value": 1.35});
> db.test.find({name: "Νίκος"});
{ "_id" : ObjectId("4f9b1642c26c79dac82740c5"), "name" : "Νίκος", "value" : 1.35 }
仔细检查 js 文件的文件编码?不过,我确信在您的实际程序中,您的搜索值来自通过 GET 或 POST 进行的 URL 编码形式,因此 js 文件上的编码并不重要。
您可以尝试在表单中设置accept-charset="utf-8"
。如果它是 AJAX 或通过 JS 通过 Angular 绑定(bind)发布,请确保在发送之前设置字符编码。像这样的东西吗? http://groups.google.com/group/angular/browse_thread/thread/e6701e749d4bc8ed
关于javascript - 使用 Javascript 在 MongoDB 中执行带有希腊字符的查询不返回任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358302/