2017-11-29 10 views
0

を生成している私は、次のマングーススキーマ持っている:私のコードでマングースセーブ()の動作を繰り返す_id

var mongoose = require('mongoose'); 

module.exports = mongoose.model('lf', { 
    _set : {type:Number}, 
    a : {type:String}, 
    b : {type:String}, 
    c : {type:Number}, 
    created_at : {type: Date, default: Date.now}, 
    updated_at : {type: Date, default: Date.now} 
},'flr'); 

を私はいくつかのコレクションを照会し、上記のスキーマが含まれているステッチJSONオブジェクトを生成します。

私は入れませんマングースを節約()操作を作っていたときが、私はそう私のスキーマにこの_idを定義しない

{ MongoError: E11000 duplicate key error collection: Da.flr index: _id_ dup key: { : ObjectId('5a0c8b3f10dfe503505fcaec') } at Function.MongoError.create 

Collection1.findOne({tfC: tfC}).lean().then(FP=> { 
    if (FP!== null && FP!== undefined){ 
     new linkedFixed(FP).save(function(err, result){ 
      console.log(err); 
      process.exit(); 
     }); 
    } 
}).catch(error => { 
    console.error(error); 
}); 

私はエラーを取得していますなぜマングースはこのインデックスに重複したエントリを生成していますか?

findのjsonオブジェクトには既に_idが含まれていることがわかりました。私は、これを削除して、私はエラーを取得する:

MongooseError: document must have an _id before saving 

私は_idを通過せずにコレクションにJSONオブジェクトを保存することができますどのように?マングースによってランダムかつユニークに割り当てられるべきではありませんか?

答えて

0

問題はlean()から発生します。 leanを使用すると、_idがmongooseクエリーから戻ってきます。

lean()_idを削除すると、ドキュメントの内容に含まれないため、オーバーライドされません。 _idを避けるために、あなたのfindOne方法で

0

使用$プロジェクト(オブジェクトID)として、以下のクエリからの復帰: Collection1.findOne({tfC: tfC},{_id:0})

@JoaoFilipeClementeMartins問題がリーンあなたと一緒で、言ったように、より詳細にはMongoDB Aggregation $project

0

を参照してください_idも取得していて、新しいオブジェクトに_idを渡して保存しようとしています。もう1つの解決策は、新しいオブジェクトに設定する前に_idを削除することです。

delete FP._id; 
new linkedFixed(FP).save(function(err, result){