2017-12-18 1 views
0
와 하위 레코드 병합 업데이트

는이 전 기록mongoimport + 점 표기법, CSV

{ 
    _id: 100, 
    foo: { 
     bar: 0, 
     baz: 1 
    } 
} 

있다고 가정 해 봅시다 나는,

_id,foo.kek 
100,9000 

그러나 CSV로 mongoimport로 업데이트 할

mongoimport --type csv --file myfile.csv --headerline --mode merge 

은 서브 BSON 오브젝트 foo는 완전히 :

{ 
    _id: 100, 
    foo: { 
     kek: 9000 
    } 
} 

mongoimport과 부분 업데이트를

{ 
    _id: 100, 
    foo: { 
     bar: 0, 
     baz: 1, 
     kek: 9000 
    } 
} 

을 할 수있는 방법이 있습니까? 그것을 할 수있는 다른 효율적인 방법이 있습니까 (저는 수백만 개의 레코드가 있습니다)?

MongoDB의 서버 버전 : 3.0.14

mongoimport 버전 : r3.4.2 사전에

감사합니다!

답변

2

mongoimport로는 불가능합니다.

--mode merge$set는 전체 문서 S :

_, err = up.collection.Upsert(selector, bson.M{"$set": document}) 

https://github.com/mongodb/mongo-tools/blob/cb82c3f9336da19b9cafabf7f57e5e5b0e875338/mongoimport/mongoimport.go#L544

가장 간단한 방법은 사용자가 설정 golang 한 경우 사용자의 요구에 맞게 코드를 패치하는 것입니다. 그렇지 않으면 파일을 임시 컬렉션으로 가져 와서 선택한 언어를 사용하여 병합하거나 자체 가져 오기 유틸리티를 작성할 수 있습니다.

+0

답변과 제안에 감사드립니다. 괜찮은 mongo 드라이버가 있으면 모든 프로그래밍 언어로 할 수 있다는 것을 알고 있습니다.이 도구 나 단순한 해킹으로 바꿀 수 있기를 바랍니다. – Anton