2016-07-11 2 views
1

컬렉션을 삭제하는 대신 removeAll 문서를 사용해야합니다. 그런데 왜 몽구스는 컬렉션이 삭제 된 후에 인덱스를 다시 생성하지 않습니까?몽구스는 인덱스 컬렉션을 다시 만들지 않습니다.

필드 중 하나에 unique:true 세트가있는 스키마가 있습니다. 인덱스는 서버를 시작할 때 만들어집니다. 하지만 컬렉션을 삭제하고 새 레코드가 오면 컬렉션이 다시 만들어지고 레코드가 삽입됩니다. 그러나 고유 필드에 대한 색인은 다시 작성되지 않습니다.

왜 그렇습니까? 색인을 다시 만들도록 요청하려면 어떻게해야합니까?

답변

1

은 (는)과 아무런 관련이 없습니다. mongodb에 색인을 놓으면 노드를 다시 시작해야합니다. 응용 프로그램이 시작되면

은, 몽구스는 자동으로 스키마에 정의 된 각 인덱스에 대한 ensureIndex를 호출합니다. Mongoose는 각 인덱스에 대해 ensureIndex를 순차적으로 호출하고 모든 ensureIndex 호출이 성공하거나 오류가 발생한 경우 모델에서 '인덱스'이벤트를 내 보냅니다. 개발을 위해 좋지만 인덱스 생성으로 인해 영향이 큰 으로 이어질 수 있으므로이 동작을 에서 사용하지 않는 것이 좋습니다.

Model.ensureIndexes(function (err) { 
    if (err) { 
     return res.end(err); 
    } 
}); 
: 그것은 다음과 같습니다 몽구스와

(Mongodb > 3.0) db.collection.createIndex({}) 

(Mongodb < 3.0) db.collection.ensureIndex({}) 

:

그럼에도 불구하고, 개발 모드에서, 당신은과 (경로 또는 이벤트에 묶여 예를 들어, 방법) 방식의 인덱스를 다시 만들 수 있습니다

관련 문제