2017-11-29 8 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 객체를 생성합니다.

하지만 나는 점점 계속 몽구스에 저장() 작업을하고 때

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); 
}); 

나는 점점 오전 오류 : 난 그렇게 내 스키마에이 _id를 정의하지

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

몽구스가이 색인에 중복 된 항목을 생성하는 이유는 무엇입니까?

find의 json 객체에 이미 _id가 있음을 알게되었습니다. 그러면 이것을 제거하면 오류가 발생합니다.

MongooseError: document must have an _id before saving 

_id를 전달하지 않고 json 객체를 컬렉션에 저장할 수 있습니까? 몽구스가 무작위로 지정해야합니까?

답변

0

문제는 lean()에서 비롯됩니다. lean _id를 사용할 때 몽구스 쿼리에서 반환됩니다.

lean() _id를 제거하면 문서 콘텐츠의 일부가 아니며 따라서 재정의되지 않습니다.

는 다음과 같이 쿼리에서 반환 _id (개체 ID)를 피하기 위해 당신의 findOne 방법에
0

사용 $ 프로젝트 : 문제는 린에 대한 자세한 내용 Collection1.findOne({tfC: tfC},{_id:0})

이 @JoaoFilipeClementeMartins 말했듯이 MongoDB Aggregation $project

0

를 참조 당신 또한 _id가 표시되며 _id를 새 객체에 전달하고 저장하려고합니다. 또 다른 가능한 해결책은 _id를 제거한 다음 새 객체에 설정하는 것입니다.

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