2013-03-05 4 views
0

export/import를 사용하여 MongoDB 데이터베이스간에 일부 데이터를 이동하려고합니다. 나는 다른 DB를 업데이트하고 싶습니다 배열 필드가 포함 된 문서가 있습니다.mongoexport에 ID가 포함되어있어 가져 오기에서 무시하지 않습니다.

첫 번째 문제는 내가 포함 된 문서에서 필요한 필드 만 내보내려고하고 있는데 전체 하위 그룹을 가져올 수 있지만 원하는 필드가 아닙니다. 좋아, 그게 쇼 마개가 아니야. 다음은 내 내보내기 명령입니다.

mongoexport -d mydb -c mycollection -o ~/temp/mongoexport/myexport.json -f id_field,subdoc_field2 -q '{$query:{"subdoc.subfield":{"$exists":true}}}'  

은 내가, 그것은 일치하는 문서를 업데이트하지 않습니다를 가져올 때이

{ "_id" : { "$oid" : "5060f491585dc52991000002" }, "id_field" : "R0410202", "subdoc" : [ { "_id" : { "$oid" : "50eb073d585dc586d600363e" },"subdoc_field1": "value1", "subdoc_field2": [intval1, intval2]}]} 
{ "_id" : { "$oid" : "5060f491585dc52991000003" }, "id_field" : "R0410202", "subdoc" : [ { "_id" : { "$oid" : "50eb073d585dc586d600364d" },"subdoc_field1": "value2", "subdoc_field2": [intval3, intval4]}]} 

처럼 보이는 뭔가를 얻을. 여기 내 명령이있다.

mongoimport -c mycollection --db assr3_production --file ~/temp/mongoexport/myexport.json -f subdoc_field2 --upsert --upsertFields id_field  

"문서의 _id를 변경할 수 없습니다"라는 오류 메시지가 나타납니다. ID를 변경하려고 시도하지는 않았지만 어쨌든 시도하려고합니다.

내보내기를 통해 ID를 포함시키지 않거나 가져 오기에서 무시하도록 할 수 있습니까? 어떤 도움을 주셔서 감사합니다!

+0

--upsertFields 옵션을 삭제하면 가져 오기가 완료되지만 원하는대로 생각하지 않습니다. acs는 -csv 모드로만 수행하는 것으로 보이고 b) subdoc은 배열이므로 내보내기가 원하는 필드를 제공하지 않습니다. subdoc.0.subdoc_field2로 지정하면 원하는 필드가 표시됩니다. 당신이하고 싶은 것이 아니라고 생각하는 이유는 upsert 모드로 가져 오기가 전체 문서를 여러분이 제공하는 필드로 대체하기 때문입니다. 따라서 몇 개의 필드 만 선택하면 가져온 후에 문서에 모두 표시됩니다. – grund

+0

방금 ​​가져온 문서와 일치하는 경우 데이터베이스의 기존 개체를 업데이트하기 위해 가져 오기 프로세스를 수정합니다. 나는 그것을 대체하지 않는 업데이트를 의미하는 것으로 읽었지 만, 대체하려고 시도하는 것 같습니다. 데이터를 코드를 작성하지 않고 이동할 수있는 방법을 찾고있었습니다. 머리를 가져 주셔서 감사합니다. – SteveO7

답변

0

Steve07, 투영을 사용하여 쿼리 결과에서 _id를 명시 적으로 제거하고자합니다.

자세한 내용은 here을 참조하십시오.

+0

내가 할 수있는 한 빨리 그걸 살펴볼 께, 고마워! – SteveO7

관련 문제