큰 brainfart 순간을 보내고 싶습니다. 하지만 여기에 내 상황이 다가옵니다.하위 문서가 기본적으로 mongodb 문서를 만듭니다?
여러 대의 컴퓨터와 코어를 다룰 수 있기를 바랍니다. 사이트마다, 내가 다른 Front
페이지를 가지고, 나는 (전편 stackoverflow 전선 stackoverflow.com/questions/tagged/javascript 및 stackoverflow.com/questions/tagged/nodejs 줄) 사이트를 위해 exmpl.
article
모든 Front
에있을 수 있고 내가 기사를 발견 할 때 URL을 알 수없는 경우 I는 Article
을 만들려는 알고있는 경우, 내가 article.discover
에 Front
항목을 만들고 싶어 Front
를 알 수없는 경우와 그렇지 않은 경우 내 FrontDiscovery
를 삽입 적절한대로 Front
.
내 스키마는 다음과 같습니다.
FrontDiscovery = new Schema({
_id :{ type:ObjectId, auto:true },
date :{ type: Date, default:Date.now},
dims :{ type: Object, default:null},
pos :{ type: Object, default:null}
});
Front = new Schema({
_id :{ type:ObjectId, auto:true },
url :{type:String}, //front
found :[ FrontDiscovery ]
});
Article = new Schema({
_id :{ type:ObjectId, auto:true },
url :{ type: String , index: { unique: true } },
site :{ type: String },
discover:[ Front]
});
문제점 결국 나는 결국 경쟁 상태에 빠질 것이라고 생각하고 있습니다. 2 명의 직업 주자가 (평행하게) 동일한 기사를 찾고 (알려지지 않은 상태에서) 기사를 작성하고 새로운 기사를 만듭니다. 그렇습니다. 고유 한 색인을 가지고 있으며 그렇게 처리 할 수 있습니다 - 매우 비현실적입니다.
하지만 더 멀리 할 수 있습니다. 언제 - 이유가 무엇인지 - 내 2 명의 직업 주자가 같은 앞면을 동시에 긁어 모으고 있습니다. 둘 다 Front
에 대해 아직 항목이없고 FrontDiscovery
을 추가하는 새 항목을 만들면 두 항목으로 끝납니다. 동일 Front
.
이러한 상황을 피하기위한 전략은 무엇입니까? upsert : findByIdAndUpdate : 각 문서마다 별도로 true? 만약 그렇다면, 어떻게 만 임베디드 문서 컬렉션으로 밀어 넣을 수 있고, 동시에 다른 모든 것을 덮어 쓰지 않고, 생성되지 않았다면 디폴트를 생성 할 수 있습니까?
올바른 방향으로 나를 안내해 주셔서 감사합니다! 나는 방대한 뇌파를 가지고 있기를 정말로 바란다.
답변 해 주셔서 감사합니다. 하지만 지금 또 다른 문제가 있습니다. 이 코드를 사용하여 기사 (및 Front)를 찾으면 아티클을 작성하고 새로운 Front를 푸시해야합니다. 그러나 "MongoError : $ push/$ pushAll 수정자를 비 배열에 적용 할 수 없습니다. "오류 'dbArticle.findOneAndUpdate은 ({ URL : article.url는 "discover.url "article.front 은}, { 설정 $ { URL을 : 기사를.URL, 사이트 : 사이트 }, $ 푸시 : { 발견 : 새로운 dbArticleFront을 ({ URL : article.front }) }, {upsert : TRUE}, 기능 (ERR, 결과) {' – japrescott
검색 필드가 배열이 아닌 값으로 설정되어 있지 않은지 확인하십시오. – christkv