###前提・実現したいこと
Node.jsを用いたサーバー上で、クライアントから送られてきた文字列を正規表現によって複数の変数に分割したうえで
MongoDBのスキーマとしてそれぞれ保存する処理。
また、保存される情報のうち_id以外はユニークではありません。
###発生している問題・エラーメッセージ
クライントから文字列を送信する際、2度目以降にunique:falseであるフィールドが原因のduplicateエラーが発生してしまいます。
text
1{ MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.error.$textId_1 dup key: { : "修正点:1: 行6、列13に誤りがあります" } 2 at Function.MongoError.create (/home/user/ドキュメント/Book_Checker/node_modules/mongoose/node_modules/mongodb-core/lib/error.js:31:11) 3 at toError (/home/user/ドキュメント/Book_Checker/node_modules/mongoose/node_modules/mongodb/lib/utils.js:139:22) 4 at /home/user/ドキュメント/Book_Checker/node_modules/mongoose/node_modules/mongodb/lib/collection.js:668:23 5 at handleCallback (/home/user/ドキュメント/Book_Checker/node_modules/mongoose/node_modules/mongodb/lib/utils.js:120:56) 6 at /home/user/ドキュメント/Book_Checker/node_modules/mongoose/node_modules/mongodb/lib/bulk/unordered.js:465:9 7 at handleCallback (/home/user/ドキュメント/Book_Checker/node_modules/mongoose/node_modules/mongodb/lib/utils.js:120:56) 8 at resultHandler (/home/user/ドキュメント/Book_Checker/node_modules/mongoose/node_modules/mongodb/lib/bulk/unordered.js:413:5) 9 at /home/user/ドキュメント/Book_Checker/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:469:18 10 at _combinedTickCallback (internal/process/next_tick.js:131:7) 11 at process._tickCallback (internal/process/next_tick.js:180:9) 12 name: 'MongoError', 13 message: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.error.$textId_1 dup key: { : "修正点:1: 行6、列13に誤りがあります" }', 14 driver: true, 15 code: 11000, 16 index: 0, 17 errmsg: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.error.$textId_1 dup key: { : "修正点:1: 行6、列13に誤りがあります" }', 18 getOperation: [Function], 19 toJSON: [Function], 20 toString: [Function] }
###該当のソースコード
該当DBのスキーマ
javascript
1var mongoose = require('mongoose'); 2var Schema = mongoose.Schema; 3var Errors = new Schema({ 4 textId : {type: String, require: true, unique: false}, //errorの種類 5 message : {type: String, require: true}, //全文 6 fileName : {type: String, require: true} //発生したファイル名 7}); 8module.exports = mongoose.model('Error', Errors, 'error');
サーバー側js (抜粋)
javascript
1 var ErrModel = require('./models/errors'); 2 var err = new ErrModel(); 3 var str = <送信されてきた全文>; 4 var filepath = <path> + <fileName>; 5 6 var id = str.match(/(修正点:.*)/g); 7 var text = str.match(new RegExp("(" + filepath + ":[0-9]:)[\s\S]*?\^\n","g")); 8 var filename = <fileName>; 9 10 //同じerrorIdの情報を加えようとするとduplicateになる 11 err.textId = id[0]; 12 err.message = text[0]; 13 err.fileName = filename; 14 15 err.save(function(err){ 16 if(err){ console.log(err); return; } 17 console.log("saved"); 18 });
###試したこと
上記のスキーマの通り、フィールドオプションに「unique:false」を明示しましたが直りませんでした。
また、こちらの確認では_idの値に変化が見られない場合がありました。
###補足情報(言語/FW/ツール等のバージョンなど)
MongoDB shell version: 2.6.10
mongoose: 4.13.7
node: v8.2.1
ご回答よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。