2017-12-26 10 views
0

필자는 1 db의 내보내기로 엉망이되어 다른 카탈로그로 가져 오는 콜렉션을 가지고 있습니다.루프에서 시퀀스 필드를 업데이트하기 위해 MongoDB 쿼리를 실행하십시오.

나는 'seqNo'라는 콜렉션에 문서의 실행 횟수를 단순히 저장하는 필드가 있는데, 가져 오는 동안 중복 된 seqNo 값을 가져 왔습니다.

나는 컬렉션에있는 문서를 반복하는 방법을 알아 내려고, 그 seqNo에 대한 증가 카운터를 사용하여 1 이후에 문서를 업데이트하려고합니다.

나는 문서를 읽고 증가하는 숫자를 삽입하는 방법을 보았지만 함수처럼 보이고 업데이트로이를 수행하는 방법을 모릅니다.

https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/

내가 찾고 있어요 어디, 더 영구적 인 것 같아, 정말 내가 할 찾고 있어요되지 것을.

+0

이것은 일회성 해결 방법입니다. 그렇습니까? 전체 컬렉션을 반복하고, 의미있는 방식으로 정렬하고, seqNo를 증가시키고 업데이트하려고합니다. –

+0

네, 그리고 그것을 알아 냈습니다. 몽고 셸에서'forEach()'를 사용하고, 카운터를 반복하고, 내가 간 것처럼 각각을 업데이트하는 짧은 함수. 위의 솔루션을 편집 된 질문에 추가하겠습니다. – bmcgonag

답변

0

내 대답은 이것을 사용하여 발견되었습니다.

mongo 쉘에서는 먼저 카운터의 초기 값을 설정합니다.

var counter = 0

당신은 변수 이름을 입력하고 수익을 눌러 몽고 쉘에서 언제든지이 카운터를 확인할 수 있습니다. 이제

0

> counter

하는 forEach 기능을 만들고 가서 카운터를 반복.

db.questions.find({}).forEach(function(doc){ 
    var = counter + 1; 
    db.questions.update({ _id: doc._id }, { $set: { seqNo: counter }}); 
}) 

내가 _id: doc._id의 업데이트 부분에 규정해야하나요 실현하기 위해 나에게 몇 가지 시도를했다. 그것 없이는 아무것도 업데이트되지 않았습니다.

+0

나는 당신이 var seq = 0을 의미한다고 생각한다. –

+0

나는 확실히했다. 그리고 나는 모든 것을 똑같은 var를 끝까지 사용하도록 수정했다. 그것을 지적 주셔서 감사합니다. – bmcgonag

관련 문제