2010-11-19 6 views
1

은 모두 :(MongoDB를 : ensureIndex 내가 내 로컬로 설치 MongoDB의 컬렉션 대량 데이터를 추가하기 위해 노력하고있어 시간에서

I 키 또는 키의 고유 인덱스를 제외하고 설정을 모두 단일 키 및 복합 키를 작동하지 사용이 맞는지이 :

다음
ensureIndex({appid:1, userid:1}, {unique:true, dropDups:true, background:true}) 

이 (내가 어떤 이유로, 여러 개의 키 지수가 작동하지 않습니다에 대한 생각 사촌)

ensureIndex({userid:1}, {unique:true, dropDups:true, background:true}) 

라인 이상 사용 후 나는에서 수백만 개의 행을 삽입하려 php 스크립트 (insert와 batchInsert를 통해)와 중복되는 userid가있을 때마다 : '(제발 이것에 대해 안내해주세요 : (

+0

안녕하세요! 결국이 문제를 해결할 수 있었습니까? 나는 똑같은 문제가 있거나, 적어도 나는 생각한다. 그러나 Mongo 콘솔 관리자를 실행하는 동안'background : true'를 설정하여 인덱스를 적용 할 수 있습니다. 너 그거 해봤 니? – Industrial

답변

0

) 인덱스가 만들어 졌는지 확인하는 것이 좋습니다. 기본적으로 쓰기 작업 (예 : 색인 작성)은 화재 및 잊어 버리고 오류/성공을 기다리지 않습니다. 이것은 드라이버 (PHP 클라이언트 lib)의 버그 일 수 있습니다.

당신은

db.coll.getIndexes() 

컬렉션의 인덱스를 나열 실행할 수 있습니다.

+0

나는 똑같은, coz ov PHP 클라이언트, 명령 행에서 인덱스가 올바르게 생성되고 중복에 대한 에러를 던지기도하지만, 다시 dropDups에 대한 신비한 속성을 생각했다.이 특성의 목적은 무엇인가? 중복을 다루지 않고 정의에 따라 중복을 제거합니까? 이상한 일들 :-) –

+0

btw, 나는 레코드를 삽입하는 동안 인덱스 생성을 볼 수있는 동시에 RockMongo를 사용하고 있지만 (중복 된 경우에는 작동하지 않습니다 ...) –

1

나는 ensureIndex가 기존 색인을 덮어 쓰지 않는다는 것을 알아 챘습니다. 대신, 당신은 먼저 기존 인덱스를 지우고 나서 ensureIndex를 실행해야한다고 생각합니다.

관련 문제