복붙노트

[MONGODB] 인덱스가 MongoDB를에 존재하는지 확인

MONGODB

인덱스가 MongoDB를에 존재하는지 확인

내가 특정 인덱스 내 MongoDB의 존재 여부를 확인하는 데 사용할 수 있습니다를 통해 자바 스크립트 몽고 쉘을 사용할 수있는 명령이 있습니다. 나는 인덱스를 생성 할 스크립트 파일을 구축하고있다. 나는 시간이 파일에 여러 번호를 실행하면 다음 이미 존재하는 인덱스가 다시되지 않도록하고 싶습니다.

스크립트를 무시 다음 인덱스를 얻을 수있는 명령이있는 경우 이미 존재하는 것들을 무시하는 내 DB에있는 모든 인덱스의 컬렉션을 가져온 다음 논리를 구축하는 db.collection.getIndexes ()를 사용할 수 있지만 궁금 해서요 그 인덱스를 생성합니다. 뭔가 같은 :

If !exists(db.collection.exists("indexname")) 
{
    create  db.collectionName.CreateIndex("IndexName")
}

해결법

  1. ==============================

    1.MongoDB를에 인덱스를 생성하는 것은 나무 등의 작업입니다. db.names.createIndex를 실행 그래서 ({이름 : 1})가 존재하지 않은 경우에만 인덱스를 만들 것입니다.

    MongoDB를에 인덱스를 생성하는 것은 나무 등의 작업입니다. db.names.createIndex를 실행 그래서 ({이름 : 1})가 존재하지 않은 경우에만 인덱스를 만들 것입니다.

    createIndex에 대한 사용되지 않는 (MongoDB를 3.0 현재) 별칭 () ensureIndex이다 () createIndex ()가 실제로 무엇을하는지에 좀 더 명확하다.

    편집하다: 이름 색인 : 이름은 같지만 기존 인덱스보다 다른 옵션 () createIndex를 호출하면 오류 MongoError를 던질 것이라고 의견에 명확히 대한 ZitRo 덕분에 ** INDEXNAME **이 질문에 설명 된대로 이미 다른 옵션이 존재한다.

    당신이 검사에 대한 다른 이유가있는 경우에, 당신은 두 가지 방법 중 현재 인덱스 데이터를 액세스 할 수 있습니다 :

  2. ==============================

    2.db.system.indexes를 사용하고 검색하십시오.

    db.system.indexes를 사용하고 검색하십시오.

    경우, 예를 들어, 당신은 당신이 이런 식으로 검색 할 수 있습니다, 인덱스가 'INDEXNAME'라는있다 :

    db.system.indexes.find({'name':'indexname'});
    

    특정 컬렉션 해당 인덱스를 검색해야하는 경우에, 당신은 (는 DB 이름을 가지고 도움이 될 것 등) NS 속성을 사용해야합니다.

    db.system.indexes.find({'name':'indexname', 'ns':'dbname.collection'});
    

    또는, 당신은 절대적으로 DB 이름을 포함 싫어하면 ...

    db.system.indexes.find({'name':'indexname', 'ns': {$regex:'.collection$'}});
    

    그 함께 이겠지 ...

    그래서, 넌 완성 검사는 다음과 같습니다

    if(db.system.indexes.find({name:'indexname',ns:{$regex:'.collection$'}}).count()==0) { 
        db.collection.createIndex({blah:1},{name:'indexname'}) 
    }
    
  3. ==============================

    3.어쩌면 우리는 무언가에 동일 컬렉션에 인덱스를 가지고 있는지 확인하는 https://docs.mongodb.com/v3.2/reference/method/db.collection.getIndexes/#db.collection.getIndexes 같은 것을 사용할 수 있습니까?

    어쩌면 우리는 무언가에 동일 컬렉션에 인덱스를 가지고 있는지 확인하는 https://docs.mongodb.com/v3.2/reference/method/db.collection.getIndexes/#db.collection.getIndexes 같은 것을 사용할 수 있습니까?

    예는 삭제하고 새로운 하나를 추가하거나 직접 새로운 하나를 추가하는 경우

  4. ==============================

    4.내 경우에는 내가는 다음과 않았다.

    내 경우에는 내가는 다음과 않았다.

       DBCollection yourcollectionName = mt.getCollection("your_collection");
        if (yourcollectionName.getIndexInfo() == null || yourcollectionName.getIndexInfo().isEmpty()) {         
          DBObject indexOptions = new BasicDBObject();
          indexOptions.put("pro1", 1);
          indexOptions.put("pro2", 1);       
          yourcollectionName.createIndex(indexOptions, "name_of_your_index", true);
         }
    
  5. from https://stackoverflow.com/questions/35019313/checking-if-an-index-exists-in-mongodb by cc-by-sa and MIT license