1

非常に大きなデータ チャンクを新しい MongoDB データベースに解析しようとしていますが、ジョブを実行するとエラーが発生し続けますdb.myCollection.find()
エラーはerror: non ascii character detectedです。

Node.js と Mongoose を使用してデータベースにデータを入力しています。問題を引き起こしている可能性のある唯一の文字はとですが'、それらすべてに .replace を実行しました。それらをエスケープしようとしました ( )。それらを完全に削除しようとしましたが、何も機能していないようです。 ,-\

私の最大の問題は、オブジェクトを保存しているときにエラーが発生しないことです。コレクションを表示しようとすると、そのメッセージが表示されます。

MongoDB 入力のサニタイズに関する情報はありますか?

4

3 に答える 3

1

文字列データの場合は、挿入する前にUTF8としてエンコードされていることを確認してください。ほとんどのドライバーはこれをチェックする必要がありますが、Mongooseドライバーでは見落とされている可能性があります。MongoDBのすべての文字列は、BSON仕様で定義されているように、UTF8として保存されます。

于 2011-07-16T04:01:39.613 に答える
1

同じ問題がありました。MongoDBバージョン: Ubuntu (EC2)上の1.8.2 + Mongoose 3.3.1 (NodeJS v0.8.14 )

> db.つぶやき.find();

エラー: 非 ASCII 文字が検出されました

MongoDB の最新バージョン ( 2.2 ) にアップグレードすると、問題が解決するというコンセンサスがあります。

次のコマンドを発行して、実行している MongoDB のバージョンを確認しました。

$ mongod --バージョン

db バージョンv1.8.2、pdffile バージョン 4.5 - 10 月 24 日水曜日 15:43:13 git バージョン: nogitversion

mongo が現在実行されているかどうかを確認します。

$ ps -聴覚障害者 | grepモンゴッド

mongodb 15408 1 0 Jun06 ? 13:50:00 /usr/bin/mongod --config /etc/mongodb.conf

MongoDBをシャットダウンするには

$ ./モンゴ

> 管理者を使用

> db.shutdownServer()

サーバーがダウンしているはずです...

その後、次の手順に従ってアップグレードしました: Ubuntu に MongoDB をインストールする方法

第 10 世代 (MongoDB の作成者) の公開鍵を apt-get に追加して、そのパッケージを信頼できるようにします。

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

$ echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" >> /etc/apt/sources.list.d/10gen.list

パッケージを更新します。

$ sudo apt-get update

10gen の MongoDB Debian/Ubuntu パッケージをインストールします。

$ sudo apt-get install mongodb-10gen

次のパッケージは削除されます: mongodb

次の新しいパッケージがインストールされます: mongodb-10gen

エラーが発生した場合は、次を試してください。

$ apt-get 自動削除

mongodbユーザー/グループにデータ ディレクトリへの書き込み権限があることを確認します。

$ sudo chown -R mongodb:mongodb /var/lib/mongodb/.

次のコマンドで MongoDB を再起動します。

$ mongod --fork --dbpath /var/lib/mongodb/ --smallfiles --logpath /var/log/mongodb.log --logappend

新しいバージョンの MongoDB を入手すると、「非 ascii」文字の問題は解消されます。:-)

于 2012-10-26T14:54:13.400 に答える
0

私が誤ってこれをしたときに私はそれを手に入れました

BasicDBObject bdb; bdb.put( "myfield"、new ObjectId(String.valueOf(objectId)));

次に、bdbをmongoに保存しました。

于 2012-02-10T06:58:55.697 に答える