使用 Javascript 在 MongoDB 中使用希腊字符执行查询不会返回任何结果

Executing Queries in MongoDB with Greek Characters using Javascript Returns No Results

本文关键字:查询 执行 返回 结果 任何 字符 MongoDB Javascript 使用      更新时间:2023-09-26

我正在构建一个结合了AngularJS框架和MongoDB的HTML5应用程序。该设置类似于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 发布,请确保在发送之前也设置了字符编码。像这样的东西?http://groups.google.com/group/angular/browse_thread/thread/e6701e749d4bc8ed